/**
*
*/
package org.feature.multi.perspective.model.editor.editors;
import java.awt.Dialog;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.feature.multi.perspective.model.viewmodel.ViewPoint;
/**
*
* @author Tim Winkelmann
*
*/
public class FilterFeatureModelHandler extends AbstractHandler {
private boolean enabled = false;
private ViewPoint viewPoint;
/*
* (non-Javadoc)
*
* @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
*/
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
ViewmodelMultiPageEditor multiPageEditor = getActiveEditor();
if (multiPageEditor != null) {
int showDialog = showDialog();
switch (showDialog) {
case 0: // filter feature model
multiPageEditor.createFilteredFeatureModel(viewPoint, true);
break;
case 1: // deselect features
multiPageEditor.createFilteredFeatureModel(viewPoint, false);
break;
case 2: // cancel, do nothing
break;
default: // cancel, do nothing
break;
}
}
return null;
}
private int showDialog(){
MessageDialog dialog = new MessageDialog(null, "Create Perspective",
null, "Please select the kind of perspective you want to create.",
MessageDialog.QUESTION, new String[] { "Filtered Feature Model",
"Pre-Configuration", "Cancel" }, 0);
int result = dialog.open();
return result;
}
private ViewmodelMultiPageEditor getActiveEditor() {
ViewmodelMultiPageEditor multiPageEditor = null;
IWorkbench workbench = PlatformUI.getWorkbench();
if (workbench != null) {
IWorkbenchWindow activeWindow = workbench.getActiveWorkbenchWindow();
if (activeWindow != null) {
IWorkbenchPage page = activeWindow.getActivePage();
if (page != null) {
IEditorPart activeEditor = page.getActiveEditor();
if (activeEditor instanceof ViewmodelMultiPageEditor) {
multiPageEditor = (ViewmodelMultiPageEditor) activeEditor;
}
}
}
}
return multiPageEditor;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.core.combattmands.AbstractHandler#isEnabled()
*/
@Override
public boolean isEnabled() {
return enabled;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.core.commands.AbstractHandler#setEnabled(java.lang.Object)
*/
@Override
public void setEnabled(Object evaluationContext) {
super.setEnabled(evaluationContext);
ViewmodelMultiPageEditor multiPageEditor = getActiveEditor();
if (multiPageEditor != null) {
ISelection selection = multiPageEditor.getSelection();
if (selection instanceof IStructuredSelection) {
IStructuredSelection structSelection = (IStructuredSelection) selection;
Object firstElement = structSelection.getFirstElement();
if (firstElement instanceof ViewPoint && multiPageEditor.getMappingResource() != null) {
this.viewPoint = (ViewPoint) firstElement;
enabled = true;
return;
}
}
}
}
}