/******************************************************************************* | |
* Copyright (c) 2008, 2010 SAP AG. | |
* All rights reserved. This program and the accompanying materials | |
* are made available under the terms of the Eclipse Public License v1.0 | |
* which accompanies this distribution, and is available at | |
* http://www.eclipse.org/legal/epl-v10.html | |
* | |
* Contributors: | |
* SAP AG - initial API and implementation | |
*******************************************************************************/ | |
package org.eclipse.mat.ui.snapshot.panes; | |
import org.eclipse.core.runtime.IProgressMonitor; | |
import org.eclipse.core.runtime.IStatus; | |
import org.eclipse.core.runtime.Status; | |
import org.eclipse.core.runtime.jobs.Job; | |
import org.eclipse.jface.action.Action; | |
import org.eclipse.jface.action.IToolBarManager; | |
import org.eclipse.mat.inspections.osgi.BundleRegistryQuery; | |
import org.eclipse.mat.inspections.osgi.BundleRegistryQuery.BundleTreeResult; | |
import org.eclipse.mat.inspections.osgi.BundleRegistryQuery.Grouping; | |
import org.eclipse.mat.inspections.osgi.model.OSGiModel; | |
import org.eclipse.mat.query.IResultTree; | |
import org.eclipse.mat.query.registry.QueryResult; | |
import org.eclipse.mat.ui.MemoryAnalyserPlugin; | |
import org.eclipse.mat.ui.Messages; | |
import org.eclipse.mat.ui.editor.AbstractPaneJob; | |
import org.eclipse.mat.ui.internal.panes.QueryResultPane; | |
import org.eclipse.mat.ui.internal.viewer.RefinedResultViewer; | |
import org.eclipse.mat.ui.util.EasyToolBarDropDown; | |
import org.eclipse.mat.ui.util.PopupMenu; | |
public class BundlesPane extends QueryResultPane | |
{ | |
private BundleRegistryQuery.Grouping groupBy; | |
private OSGiModel model; | |
private class TopLevelAction extends Action | |
{ | |
private BundleRegistryQuery.Grouping target; | |
public TopLevelAction(BundleRegistryQuery.Grouping topLevelBy) | |
{ | |
super(topLevelBy.toString(), AS_CHECK_BOX); | |
this.setImageDescriptor(MemoryAnalyserPlugin.getDefault().getImageDescriptor(topLevelBy.getIcon())); | |
this.target = topLevelBy; | |
} | |
public void run() | |
{ | |
if (!isChecked())// do not run the same action twice - selection | |
// was not changed | |
return; | |
Job job = new AbstractPaneJob(getText(), BundlesPane.this) | |
{ | |
protected IStatus doRun(IProgressMonitor monitor) | |
{ | |
IResultTree tree = null; | |
switch (target) | |
{ | |
case NONE: | |
tree = BundleRegistryQuery.Factory.create(model); | |
break; | |
case BY_SERVICE: | |
tree = BundleRegistryQuery.Factory.servicesOnTop(model); | |
break; | |
case BY_EXTENSION_POINT: | |
tree = BundleRegistryQuery.Factory.extensionPointsOnTop(model); | |
break; | |
} | |
final QueryResult queryResult = new QueryResult(((BundlesPane)getPane()).srcQueryResult.getQuery(), "bundle_registry -groupBy " + target.name(),//$NON-NLS-1$ | |
tree); | |
top.getDisplay().asyncExec(new Runnable() | |
{ | |
public void run() | |
{ | |
deactivateViewer(); | |
groupBy = target; | |
RefinedResultViewer v = createViewer(queryResult); | |
activateViewer(v); | |
} | |
}); | |
return Status.OK_STATUS; | |
} | |
}; | |
job.setUser(true); | |
job.schedule(); | |
} | |
} | |
@Override | |
public void initWithArgument(Object argument) | |
{ | |
QueryResult queryResult = (QueryResult) argument; | |
BundleTreeResult tree = (BundleTreeResult) queryResult.getSubject(); | |
groupBy = tree.getGroupBy(); | |
model = tree.getModel(); | |
super.initWithArgument(argument); | |
} | |
@Override | |
public void contributeToToolBar(IToolBarManager manager) | |
{ | |
addGroupingOptions(manager); | |
super.contributeToToolBar(manager); | |
} | |
private void addGroupingOptions(IToolBarManager manager) | |
{ | |
Action groupingAction = new EasyToolBarDropDown(Messages.BundlesPane_GroupBy, // | |
MemoryAnalyserPlugin.getImageDescriptor(MemoryAnalyserPlugin.ISharedImages.GROUPING), this) | |
{ | |
@Override | |
public void contribute(PopupMenu menu) | |
{ | |
for (Grouping choice : Grouping.values()) | |
{ | |
Action action = new TopLevelAction(choice); | |
action.setEnabled(choice != groupBy); | |
action.setChecked(choice == groupBy); | |
menu.add(action); | |
} | |
} | |
}; | |
manager.add(groupingAction); | |
} | |
} |