|
Lines 11-16
Link Here
|
| 11 |
*******************************************************************************/ |
11 |
*******************************************************************************/ |
| 12 |
package org.eclipse.tptp.monitoring.managedagent.ui.explorer.internal.ui; |
12 |
package org.eclipse.tptp.monitoring.managedagent.ui.explorer.internal.ui; |
| 13 |
|
13 |
|
|
|
14 |
import java.util.Hashtable; |
| 15 |
|
| 16 |
import org.eclipse.core.runtime.IConfigurationElement; |
| 17 |
import org.eclipse.core.runtime.IExtension; |
| 18 |
import org.eclipse.core.runtime.Platform; |
| 14 |
import org.eclipse.hyades.models.hierarchy.TRCAgentProxy; |
19 |
import org.eclipse.hyades.models.hierarchy.TRCAgentProxy; |
| 15 |
import org.eclipse.jface.action.Action; |
20 |
import org.eclipse.jface.action.Action; |
| 16 |
import org.eclipse.jface.action.IMenuListener; |
21 |
import org.eclipse.jface.action.IMenuListener; |
|
Lines 21-26
Link Here
|
| 21 |
import org.eclipse.jface.dialogs.MessageDialog; |
26 |
import org.eclipse.jface.dialogs.MessageDialog; |
| 22 |
import org.eclipse.jface.viewers.CellEditor; |
27 |
import org.eclipse.jface.viewers.CellEditor; |
| 23 |
import org.eclipse.jface.viewers.DecoratingLabelProvider; |
28 |
import org.eclipse.jface.viewers.DecoratingLabelProvider; |
|
|
29 |
import org.eclipse.jface.viewers.IContentProvider; |
| 24 |
import org.eclipse.jface.viewers.ISelection; |
30 |
import org.eclipse.jface.viewers.ISelection; |
| 25 |
import org.eclipse.jface.viewers.ISelectionChangedListener; |
31 |
import org.eclipse.jface.viewers.ISelectionChangedListener; |
| 26 |
import org.eclipse.jface.viewers.IStructuredSelection; |
32 |
import org.eclipse.jface.viewers.IStructuredSelection; |
|
Lines 28-34
Link Here
|
| 28 |
import org.eclipse.jface.viewers.TableViewer; |
34 |
import org.eclipse.jface.viewers.TableViewer; |
| 29 |
import org.eclipse.jface.viewers.TextCellEditor; |
35 |
import org.eclipse.jface.viewers.TextCellEditor; |
| 30 |
import org.eclipse.jface.viewers.TreeViewer; |
36 |
import org.eclipse.jface.viewers.TreeViewer; |
| 31 |
import org.eclipse.jface.viewers.ViewerComparator; |
|
|
| 32 |
import org.eclipse.swt.SWT; |
37 |
import org.eclipse.swt.SWT; |
| 33 |
import org.eclipse.swt.custom.CTabFolder; |
38 |
import org.eclipse.swt.custom.CTabFolder; |
| 34 |
import org.eclipse.swt.custom.CTabItem; |
39 |
import org.eclipse.swt.custom.CTabItem; |
|
Lines 36-72
Link Here
|
| 36 |
import org.eclipse.swt.events.ModifyListener; |
41 |
import org.eclipse.swt.events.ModifyListener; |
| 37 |
import org.eclipse.swt.events.SelectionAdapter; |
42 |
import org.eclipse.swt.events.SelectionAdapter; |
| 38 |
import org.eclipse.swt.events.SelectionEvent; |
43 |
import org.eclipse.swt.events.SelectionEvent; |
| 39 |
import org.eclipse.swt.graphics.Image; |
|
|
| 40 |
import org.eclipse.swt.graphics.Point; |
| 41 |
import org.eclipse.swt.graphics.Rectangle; |
| 42 |
import org.eclipse.swt.layout.FillLayout; |
44 |
import org.eclipse.swt.layout.FillLayout; |
| 43 |
import org.eclipse.swt.layout.GridData; |
45 |
import org.eclipse.swt.layout.GridData; |
| 44 |
import org.eclipse.swt.layout.GridLayout; |
46 |
import org.eclipse.swt.layout.GridLayout; |
| 45 |
import org.eclipse.swt.widgets.Button; |
47 |
import org.eclipse.swt.widgets.Button; |
| 46 |
import org.eclipse.swt.widgets.Composite; |
48 |
import org.eclipse.swt.widgets.Composite; |
| 47 |
import org.eclipse.swt.widgets.Menu; |
49 |
import org.eclipse.swt.widgets.Menu; |
| 48 |
import org.eclipse.swt.widgets.MenuItem; |
|
|
| 49 |
import org.eclipse.swt.widgets.Table; |
50 |
import org.eclipse.swt.widgets.Table; |
| 50 |
import org.eclipse.swt.widgets.TableColumn; |
51 |
import org.eclipse.swt.widgets.TableColumn; |
| 51 |
import org.eclipse.swt.widgets.TableItem; |
52 |
import org.eclipse.swt.widgets.TableItem; |
| 52 |
import org.eclipse.swt.widgets.Text; |
53 |
import org.eclipse.swt.widgets.Text; |
| 53 |
import org.eclipse.swt.widgets.ToolBar; |
54 |
import org.eclipse.tptp.monitoring.managedagent.ui.explorer.filter.IFilterProvider; |
| 54 |
import org.eclipse.swt.widgets.ToolItem; |
|
|
| 55 |
import org.eclipse.swt.widgets.Tree; |
| 56 |
import org.eclipse.tptp.monitoring.managedagent.ui.explorer.internal.ManagedAgentUIPlugin; |
55 |
import org.eclipse.tptp.monitoring.managedagent.ui.explorer.internal.ManagedAgentUIPlugin; |
| 57 |
import org.eclipse.tptp.monitoring.managedagent.ui.explorer.internal.editor.PropertiesCellModifier; |
56 |
import org.eclipse.tptp.monitoring.managedagent.ui.explorer.internal.editor.PropertiesCellModifier; |
| 58 |
import org.eclipse.tptp.monitoring.managedagent.ui.explorer.internal.editor.PropertiesViewContentProvider; |
57 |
import org.eclipse.tptp.monitoring.managedagent.ui.explorer.internal.editor.PropertiesViewContentProvider; |
| 59 |
import org.eclipse.tptp.monitoring.managedagent.ui.explorer.internal.editor.PropertiesViewLabelProvider; |
58 |
import org.eclipse.tptp.monitoring.managedagent.ui.explorer.internal.editor.PropertiesViewLabelProvider; |
| 60 |
import org.eclipse.tptp.monitoring.managedagent.ui.explorer.internal.filter.Comparator; |
|
|
| 61 |
import org.eclipse.tptp.monitoring.managedagent.ui.explorer.internal.filter.Filter; |
| 62 |
import org.eclipse.tptp.monitoring.managedagent.ui.explorer.internal.filter.FilterDialog; |
| 63 |
import org.eclipse.tptp.monitoring.managedagent.ui.explorer.internal.filter.MaxFilterPreference; |
59 |
import org.eclipse.tptp.monitoring.managedagent.ui.explorer.internal.filter.MaxFilterPreference; |
| 64 |
import org.eclipse.tptp.monitoring.managedagent.ui.explorer.internal.util.ImageUtil; |
60 |
import org.eclipse.tptp.monitoring.managedagent.ui.explorer.internal.util.ImageUtil; |
| 65 |
import org.eclipse.tptp.monitoring.managedagent.ui.explorer.provisional.controller.BrowserLabelProvider; |
61 |
import org.eclipse.tptp.monitoring.managedagent.ui.explorer.provisional.controller.BrowserLabelProvider; |
| 66 |
import org.eclipse.tptp.monitoring.managedagent.ui.explorer.provisional.controller.BrowserViewContentProvider; |
62 |
import org.eclipse.tptp.monitoring.managedagent.ui.explorer.provisional.controller.BrowserViewContentProvider; |
| 67 |
import org.eclipse.tptp.monitoring.managedagent.ui.explorer.provisional.controller.IBrowserNode; |
63 |
import org.eclipse.tptp.monitoring.managedagent.ui.explorer.provisional.controller.IBrowserNode; |
| 68 |
import org.eclipse.tptp.monitoring.managedagent.ui.explorer.provisional.controller.IViewContributor; |
64 |
import org.eclipse.tptp.monitoring.managedagent.ui.explorer.provisional.controller.IViewContributor; |
| 69 |
import org.eclipse.tptp.monitoring.managedagent.ui.explorer.provisional.controller.ManagedResourceNode; |
|
|
| 70 |
import org.eclipse.ui.IWorkbenchActionConstants; |
65 |
import org.eclipse.ui.IWorkbenchActionConstants; |
| 71 |
import org.eclipse.ui.PlatformUI; |
66 |
import org.eclipse.ui.PlatformUI; |
| 72 |
import org.eclipse.ui.forms.widgets.FormToolkit; |
67 |
import org.eclipse.ui.forms.widgets.FormToolkit; |
|
Lines 85-90
Link Here
|
| 85 |
public static final String ID = "org.eclipse.tptp.monitoring.managedagent.ui.explorer.internal.ui.MAExplorerView"; //$NON-NLS-1$ |
80 |
public static final String ID = "org.eclipse.tptp.monitoring.managedagent.ui.explorer.internal.ui.MAExplorerView"; //$NON-NLS-1$ |
| 86 |
|
81 |
|
| 87 |
private static final int DEFAULT_PADDING = 5; |
82 |
private static final int DEFAULT_PADDING = 5; |
|
|
83 |
|
| 84 |
public static final String FILTER_EXT_PT = "maxFilter"; |
| 88 |
|
85 |
|
| 89 |
/** |
86 |
/** |
| 90 |
* The widget that shows our tree view |
87 |
* The widget that shows our tree view |
|
Lines 115-135
Link Here
|
| 115 |
|
112 |
|
| 116 |
private static MAExplorerView _default = null; |
113 |
private static MAExplorerView _default = null; |
| 117 |
|
114 |
|
| 118 |
private ViewerComparator _sorter; |
115 |
public static boolean filterMatches = true; |
| 119 |
|
|
|
| 120 |
private boolean _sort = false; |
| 121 |
|
| 122 |
private Image _imgSort; |
| 123 |
|
| 124 |
private Image _imgFilter; |
| 125 |
|
| 126 |
private Image _imgUnSort; |
| 127 |
|
| 128 |
private MenuItem _miFilter; |
| 129 |
|
116 |
|
| 130 |
private ToolItem _tiSort; |
117 |
private IFilterProvider _filterProvider; |
| 131 |
|
118 |
|
| 132 |
public static boolean filterMatches = true; |
119 |
private Section _topologySection; |
|
|
120 |
|
| 121 |
private static Hashtable _filterProviders = new Hashtable(); |
| 133 |
|
122 |
|
| 134 |
/** |
123 |
/** |
| 135 |
* The constructor. |
124 |
* The constructor. |
|
Lines 166-171
Link Here
|
| 166 |
|
155 |
|
| 167 |
layoutAgentTopologyTree(); |
156 |
layoutAgentTopologyTree(); |
| 168 |
layoutDataPanels(); |
157 |
layoutDataPanels(); |
|
|
158 |
loadFilterExtensions(); |
| 169 |
} |
159 |
} |
| 170 |
|
160 |
|
| 171 |
private void layoutDataPanels() { |
161 |
private void layoutDataPanels() { |
|
Lines 387-405
Link Here
|
| 387 |
|
377 |
|
| 388 |
parent.setLayout(layout); |
378 |
parent.setLayout(layout); |
| 389 |
|
379 |
|
| 390 |
Section label = _toolkit.createSection(parent, Section.TITLE_BAR); |
380 |
_topologySection = _toolkit.createSection(parent, Section.TITLE_BAR); |
| 391 |
label.setText(Messages |
381 |
_topologySection.setText(Messages |
| 392 |
.getString("MAExplorerView.RESOURCE_TOPOLOGY.UI.")); //$NON-NLS-1$ |
382 |
.getString("MAExplorerView.RESOURCE_TOPOLOGY.UI.")); //$NON-NLS-1$ |
| 393 |
GridData gd = new GridData(); |
383 |
GridData gd = new GridData(); |
| 394 |
gd.grabExcessHorizontalSpace = true; |
384 |
gd.grabExcessHorizontalSpace = true; |
| 395 |
gd.grabExcessVerticalSpace = false; |
385 |
gd.grabExcessVerticalSpace = false; |
| 396 |
gd.horizontalAlignment = SWT.FILL; |
386 |
gd.horizontalAlignment = SWT.FILL; |
| 397 |
label.setLayoutData(gd); |
387 |
_topologySection.setLayoutData(gd); |
| 398 |
|
388 |
|
| 399 |
_sorter = new Comparator(); |
|
|
| 400 |
addSortAndFilterToolBar(label); |
| 401 |
disableFilterAndSorting(); |
| 402 |
|
| 403 |
_topologyViewer = new TreeViewer(parent); |
389 |
_topologyViewer = new TreeViewer(parent); |
| 404 |
|
390 |
|
| 405 |
gd = new GridData(); |
391 |
gd = new GridData(); |
|
Lines 500-624
Link Here
|
| 500 |
} |
486 |
} |
| 501 |
|
487 |
|
| 502 |
private void addSortAndFilterToolBar(Section label) { |
488 |
private void addSortAndFilterToolBar(Section label) { |
| 503 |
Composite sfComp = _toolkit.createComposite(label); |
489 |
if(_filterProvider == null) |
| 504 |
sfComp.setLayout(new FillLayout()); |
490 |
{ |
| 505 |
ToolBar tb = new ToolBar(sfComp, SWT.NONE); |
491 |
return; |
| 506 |
_tiSort = new ToolItem(tb, SWT.DROP_DOWN); |
492 |
} |
| 507 |
_imgSort = ImageUtil.getImage(ImageUtil.SORT_IMAGE); |
493 |
Composite sfComp = _filterProvider.createFilterUI(label); |
| 508 |
_tiSort.setImage(_imgSort); |
494 |
if(sfComp == null) |
| 509 |
|
495 |
{ |
| 510 |
_imgUnSort = ImageUtil.getImage(ImageUtil.UNSORT_IMAGE); |
496 |
return; |
| 511 |
|
497 |
} |
| 512 |
Menu ddMenu = new Menu(_tiSort.getParent().getShell(), SWT.NONE); |
|
|
| 513 |
_miFilter = new MenuItem(ddMenu, SWT.NONE); |
| 514 |
_imgFilter = ImageUtil.getImage(ImageUtil.FILTER_IMAGE); |
| 515 |
_miFilter.setImage(_imgFilter); |
| 516 |
_miFilter.setText(Messages.getString("MAExplorerView.FILTER.UI.")); |
| 517 |
|
| 518 |
addMenuItemSelectionListener(); |
| 519 |
addToolItemSelectionListener(_tiSort, ddMenu); |
| 520 |
|
| 521 |
_toolkit.adapt(sfComp); |
498 |
_toolkit.adapt(sfComp); |
| 522 |
label.setTextClient(sfComp); |
499 |
label.setTextClient(sfComp); |
|
|
500 |
label.layout(true); |
| 523 |
} |
501 |
} |
| 524 |
|
502 |
|
| 525 |
private void addMenuItemSelectionListener() { |
503 |
|
| 526 |
_miFilter.addSelectionListener(new SelectionAdapter() { |
|
|
| 527 |
public void widgetSelected(SelectionEvent se) { |
| 528 |
Filter filter = new FilterDialog().showWindow(); |
| 529 |
if (filter == null) { |
| 530 |
return; |
| 531 |
} |
| 532 |
|
| 533 |
IBrowserNode root = _topologyViewContentProvider.getRoot(); |
| 534 |
|
| 535 |
// if this is a service group then we can apply this filter |
| 536 |
// note that we do not check if it has members coz it might be an empty service group at this point and more members might be added later |
| 537 |
|
| 538 |
System.out.println("root instanceof ManagedResourceNode = "+(root instanceof ManagedResourceNode)); |
| 539 |
System.out.println(root.getClass()); |
| 540 |
Object[] children = root.getChildren(); |
| 541 |
|
| 542 |
// the first child is what we want |
| 543 |
IBrowserNode child = null; |
| 544 |
try{ |
| 545 |
child = (IBrowserNode) children[0]; |
| 546 |
}catch(ArrayIndexOutOfBoundsException ae){ |
| 547 |
|
| 548 |
} |
| 549 |
if(child != null |
| 550 |
&& child instanceof ManagedResourceNode){ |
| 551 |
((ManagedResourceNode)child).setFilter(filter); |
| 552 |
((ManagedResourceNode)child).refresh(); |
| 553 |
if (!filterMatches) { |
| 554 |
MessageDialog |
| 555 |
.openInformation( |
| 556 |
_topologyViewer.getControl().getShell(), |
| 557 |
Messages |
| 558 |
.getString("MAExplorerView.FILTER.TITILE.UI."), |
| 559 |
Messages |
| 560 |
.getString("MAExplorerView.FILTER.MESSAGE.UI.")); |
| 561 |
//_topologyViewer.setInput(null); |
| 562 |
} |
| 563 |
} |
| 564 |
|
| 565 |
// this filtering must not be done here - it should be done by the ManagedResourceNode in figuring out which of its children to show |
| 566 |
/* |
| 567 |
Object[] children = root.getChildren(); |
| 568 |
for (int i = 0; i < children.length; i++) { |
| 569 |
root.removeChild((IBrowserNode) children[i]); |
| 570 |
} |
| 571 |
FilterUtil.setFilter(filter); |
| 572 |
System.out.println("FILTER STRING: " + filter.toString()); |
| 573 |
ManagedResource[] resources = FilterUtil.getManagedResources(); |
| 574 |
if (resources == null || resources.length<0) { |
| 575 |
return; |
| 576 |
} |
| 577 |
_topologyViewContentProvider.setFilterMatch(false); |
| 578 |
|
| 579 |
boolean match = _topologyViewContentProvider.getFilterMatch(); |
| 580 |
if (!match) { |
| 581 |
MessageDialog |
| 582 |
.openInformation( |
| 583 |
_topologyViewer.getControl().getShell(), |
| 584 |
Messages |
| 585 |
.getString("MAExplorerView.FILTER.TITILE.UI."), |
| 586 |
Messages |
| 587 |
.getString("MAExplorerView.FILTER.MESSAGE.UI.")); |
| 588 |
_topologyViewer.setInput(null); |
| 589 |
} |
| 590 |
*/ |
| 591 |
} |
| 592 |
}); |
| 593 |
} |
| 594 |
|
| 595 |
private void addToolItemSelectionListener(ToolItem ti, final Menu ddMenu) { |
| 596 |
ti.addSelectionListener(new SelectionAdapter() { |
| 597 |
public void widgetSelected(SelectionEvent se) { |
| 598 |
ToolItem item = (ToolItem) se.widget; |
| 599 |
if (se.detail == SWT.ARROW) { |
| 600 |
// Determine where to put the dropdown list |
| 601 |
Rectangle rect = item.getBounds(); |
| 602 |
Point pt = item.getParent().toDisplay( |
| 603 |
new Point(rect.x, rect.y)); |
| 604 |
ddMenu.setLocation(pt.x, pt.y + rect.height); |
| 605 |
ddMenu.setVisible(true); |
| 606 |
} else { |
| 607 |
_sort = !_sort; |
| 608 |
if (_sort) { |
| 609 |
item.setImage(_imgUnSort); |
| 610 |
Tree tree = _topologyViewer.getTree(); |
| 611 |
if (tree != null) { |
| 612 |
_topologyViewer.setComparator(_sorter); |
| 613 |
} |
| 614 |
} else { |
| 615 |
item.setImage(_imgSort); |
| 616 |
_topologyViewer.setComparator(null); |
| 617 |
} |
| 618 |
} |
| 619 |
} |
| 620 |
}); |
| 621 |
} |
| 622 |
|
504 |
|
| 623 |
private void makeActions() { |
505 |
private void makeActions() { |
| 624 |
_refreshPropertiesAction = new Action() { |
506 |
_refreshPropertiesAction = new Action() { |
|
Lines 669-680
Link Here
|
| 669 |
|
551 |
|
| 670 |
public void disableFilterAndSorting() |
552 |
public void disableFilterAndSorting() |
| 671 |
{ |
553 |
{ |
| 672 |
_tiSort.setEnabled(false); |
554 |
if(_filterProvider != null) |
|
|
555 |
_filterProvider.enableFiltering(false); |
| 673 |
} |
556 |
} |
| 674 |
|
557 |
|
| 675 |
public void enableFilterAndSorting() |
558 |
public void enableFilterAndSorting() |
| 676 |
{ |
559 |
{ |
| 677 |
_tiSort.setEnabled(true); |
560 |
if(_filterProvider != null) |
|
|
561 |
_filterProvider.enableFiltering(true); |
| 678 |
} |
562 |
} |
| 679 |
|
563 |
|
|
|
564 |
public void setFilterProvider(IFilterProvider provider) |
| 565 |
{ |
| 566 |
this._filterProvider = provider; |
| 567 |
addSortAndFilterToolBar(_topologySection); |
| 568 |
disableFilterAndSorting(); |
| 569 |
} |
| 570 |
|
| 571 |
public IFilterProvider getFilterProvider() |
| 572 |
{ |
| 573 |
return this._filterProvider; |
| 574 |
} |
| 575 |
|
| 576 |
public IContentProvider getContentProvider() |
| 577 |
{ |
| 578 |
return _topologyViewContentProvider; |
| 579 |
} |
| 580 |
|
| 581 |
private void loadFilterExtensions() |
| 582 |
{ |
| 583 |
_filterProviders = new Hashtable(); |
| 584 |
IExtension[] exts = Platform.getExtensionRegistry().getExtensionPoint(ManagedAgentUIPlugin.PLUGIN_ID, FILTER_EXT_PT).getExtensions(); |
| 585 |
if(exts == null || exts.length == 0) |
| 586 |
return; |
| 587 |
for (int i = 0; i < exts.length; ++i) { |
| 588 |
IConfigurationElement[] elements = exts[i].getConfigurationElements(); |
| 589 |
for (int j = 0; j < elements.length; ++j) { |
| 590 |
if ("MAXFilter".equals(elements[j].getName())) { //$NON-NLS-1$ |
| 591 |
try { |
| 592 |
IFilterProvider helper = (IFilterProvider) elements[j].createExecutableExtension("providerClass"); //$NON-NLS-1$ |
| 593 |
helper.setMAXView(this); |
| 594 |
String type = elements[j].getAttribute("agentType"); //$NON-NLS-1$ |
| 595 |
//System.out.println("PC = " + elements[j].getAttribute("providerClass")); |
| 596 |
_filterProviders.put(type, helper); |
| 597 |
} catch (Exception e) { |
| 598 |
e.printStackTrace(); |
| 599 |
} |
| 600 |
} |
| 601 |
} |
| 602 |
} |
| 603 |
} |
| 604 |
|
| 605 |
public static IFilterProvider getFilterProviderForAgentType(String agentType) |
| 606 |
{ |
| 607 |
return (IFilterProvider) _filterProviders.get(agentType); |
| 608 |
} |
| 609 |
|
| 680 |
} |
610 |
} |