package jqian.slicer.plugin.actions;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.ui.*;
import org.eclipse.core.resources.*;
import org.eclipse.swt.widgets.*;
import jqian.slicer.plugin.*;
import jqian.slicer.plugin.view.PluginSliceViewer;
import jqian.slicer.view.ConfigDlg;
import jqian.slicer.view.ProjectEntrySelector;
import jqian.slicer.view.global.ISliceDistribution;
import jqian.slicer.core.*;
import jqian.util.eclipse.ConsoleUtil;
public class ProjectMenuActionDelegate implements IObjectActionDelegate {
private IProject _project;
public ProjectMenuActionDelegate() {
}
/**
* @see IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart)
*/
public void setActivePart(IAction action, IWorkbenchPart targetPart) {
}
/**
* @see IActionDelegate#run(IAction)
*/
public void run(IAction action) {
String id = action.getId();
if(id.equals("jqian.slicer.setProjectEntryAction")){
setProjectEntry();
}
else if(id.equals("jqian.slicer.configSlicer")){
configSlicer();
}
else if(id.equals("jqian.slicer.showGbViewAction")){
showGlobalSliceView();
}
else if(id.equals("jqian.slicer.resetAction")){
resetAll();
}
}
private void setProjectEntry(){
if(!SlithiceSlicer.v().isConfigurated()){
Shell shell = WorkbenchHelper.getActiveJDTEditorShell();
MessageDialog.openInformation(shell, "The slicer has not been configurated",
"Please rigth click on the project item, and configurate from menu "
+"\"program slicing\" -> \"Configurate Slicer\" first.");
return;
}
IJavaProject javaPrj = JavaCore.create(_project);
Shell shell = WorkbenchHelper.getActiveShell();
ProjectEntrySelector selector = new ProjectEntrySelector(shell,javaPrj);
if(selector.open()==IDialogConstants.OK_ID){
SlithiceSlicer.v().setProject(javaPrj,selector.getEntry());
ConsoleUtil.showConsole(ID.CONSOLE);
}
}
private void configSlicer(){
Shell shell = WorkbenchHelper.getActiveShell();
SlicerOptions options = SlithiceSlicer.v().getConfiguration();
ConfigDlg configer = new ConfigDlg(shell,options);
if(configer.open()==IDialogConstants.OK_ID){
options = configer.getConfiguration();
SlithiceSlicer.v().reconfig(options);
}
}
private void showGlobalSliceView() {
PluginSliceViewer view = (PluginSliceViewer)WorkbenchHelper.openView(ID.GLOBAL_VIEW_ID);
ISliceDistribution distribution = SlithiceSlicer.v().getCurrentSliceDistribution();
if(distribution==null){
Shell shell = WorkbenchHelper.getActiveJDTEditorShell();
MessageDialog.openInformation(shell,"Show Slicing Result Distribution",
"No slicing result found.\n"
+"Choose a new slicing criterion and perform slicing first. \n");
}
else{
view.setProject(_project,distribution);
}
}
private void resetAll() {
Shell shell = WorkbenchHelper.getActiveJDTEditorShell();
boolean ok = MessageDialog.openConfirm(shell,"Reset Slicer",
"This operation will clear the dependence graph and the current slicing data. "
+"Recomputing them can be time-consumming. \n"
+"Are you sure to continue?");
if(ok){
SlithiceSlicer.v().reset();
}
}
/**
* @see IActionDelegate#selectionChanged(IAction, ISelection)
*/
public void selectionChanged(IAction action, ISelection selection) {
_project = (IProject)SelectionResolver.getSelectedResource(selection,IResource.PROJECT);
}
}