package org.objectstyle.wolips.componenteditor.actions;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.Status;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.ui.JavaUI;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IActionDelegate2;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.IWorkbenchWindowActionDelegate;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.SelectionDialog;
import org.objectstyle.wolips.baseforuiplugins.utils.WorkbenchUtilities;
import org.objectstyle.wolips.componenteditor.part.ComponentEditor;
import org.objectstyle.wolips.locate.LocatePlugin;
import org.objectstyle.wolips.locate.result.LocalizedComponentsLocateResult;
public class OpenComponentAction extends Action implements IWorkbenchWindowActionDelegate, IActionDelegate2 {
private Object _selectedObject;
public OpenComponentAction() {
setText("Open Component");
setDescription("Open a Component");
setToolTipText("Open a Component");
}
public void run() {
runWithEvent(null);
}
public void runWithEvent(Event e) {
IJavaProject javaProject = null;
if (_selectedObject instanceof IJavaElement) {
IJavaElement javaElement = (IJavaElement) _selectedObject;
javaProject = javaElement.getJavaProject();
} else if (_selectedObject instanceof IResource) {
IProject project = ((IResource) _selectedObject).getProject();
javaProject = JavaCore.create(project);
} else {
IEditorPart editorPart = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
if (editorPart != null) {
IEditorInput editorInput = editorPart.getEditorInput();
if (editorInput instanceof IFileEditorInput) {
IFile file = ((IFileEditorInput) editorInput).getFile();
javaProject = JavaCore.create(file.getProject());
}
}
}
Shell parent = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
if (javaProject == null) {
ErrorDialog.openError(parent, "Select a Project", "You must have selected an object within a project before using Open Component.", Status.OK_STATUS);
}
else {
SelectionDialog dialog = new WOElementSelectionDialog(parent, javaProject, PlatformUI.getWorkbench().getProgressService());
dialog.setTitle("Open Component");
dialog.setMessage("Select a Component to Open");
int result = dialog.open();
if (result != IDialogConstants.OK_ID) {
return;
}
Object[] typeNames = dialog.getResult();
if (typeNames != null && typeNames.length > 0) {
for (int i = 0; i < typeNames.length; i++) {
String typeName = (String) typeNames[i];
OpenComponentAction.openComponentWithTypeNamed(javaProject, typeName);
}
}
}
}
public void run(IAction action) {
run();
}
public void dispose() {
// DO NOTHING
}
public void init(IWorkbenchWindow window) {
// DO NOTHING
}
public void selectionChanged(IAction action, ISelection selection) {
if (selection instanceof IStructuredSelection) {
_selectedObject = ((IStructuredSelection) selection).getFirstElement();
}
}
public void runWithEvent(IAction action, Event event) {
runWithEvent(event);
}
public void init(IAction action) {
// DO NOTHING
}
public static void openComponentWithTypeNamed(IJavaProject javaProject, String typeName) {
try {
IType type = javaProject.findType(typeName);
if (type != null) {
JavaUI.openInEditor(type, true, true);
LocalizedComponentsLocateResult componentsLocateResults = LocatePlugin.getDefault().getLocalizedComponentsLocateResult(type.getUnderlyingResource());
IFile wodFile = componentsLocateResults.getFirstWodFile();
if (wodFile != null) {
WorkbenchUtilities.open(wodFile, ComponentEditor.ID);
}
}
} catch (Throwable e1) {
e1.printStackTrace();
}
}
}