package org.phpsrc.eclipse.pti.tools.phpunit.ui.actions; import org.eclipse.core.resources.IFile; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ISelection; import org.eclipse.ui.IEditorDescriptor; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.IWorkbenchWindowActionDelegate; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.part.FileEditorInput; import org.phpsrc.eclipse.pti.core.PHPToolCorePlugin; import org.phpsrc.eclipse.pti.core.PHPToolkitUtil; import org.phpsrc.eclipse.pti.tools.phpunit.PHPUnitPlugin; import org.phpsrc.eclipse.pti.tools.phpunit.core.PHPUnit; public class ToogleTestCaseTestElementAction implements IWorkbenchWindowActionDelegate { public void run(IAction action) { IWorkbenchPage page = PHPUnitPlugin.getActivePage(); if (page != null) { IEditorPart editor = page.getActiveEditor(); if (editor != null) { IEditorInput input = editor.getEditorInput(); if (input != null) { IFile file = (IFile) input.getAdapter(IFile.class); if (file != null) { if (PHPUnit.isTestSuite(file)) return; IFile targetFile = null; String errorMsg = null; if (PHPUnit.isTestCase(file)) { targetFile = PHPUnit.searchTestElement(file); if (!openFile(page, targetFile)) { String sourceClassName = PHPToolkitUtil .getClassNameWithNamespace(file); if (sourceClassName == null) sourceClassName = "unknown"; String targetClass = sourceClassName.substring( 0, sourceClassName.length() - 4); errorMsg = "Can't find php class '" + targetClass + "' for test case class '" + sourceClassName + "'"; MessageDialog.openError(PHPToolCorePlugin .getActiveWorkbenchShell(), "Error", errorMsg); } } else { targetFile = PHPUnit.searchTestCase(file); if (!openFile(page, targetFile)) { String sourceClassName = PHPToolkitUtil .getClassNameWithNamespace(file); if (sourceClassName == null) sourceClassName = "unknown"; errorMsg = "Can't find test case class '" + sourceClassName + "Test' for php class '" + sourceClassName + "'"; MessageDialog.openError(PHPToolCorePlugin .getActiveWorkbenchShell(), "Error", errorMsg); } } } } } } } protected boolean openFile(IWorkbenchPage page, IFile file) { if (page != null && file != null) { IEditorDescriptor desc = PlatformUI.getWorkbench() .getEditorRegistry().getDefaultEditor(file.getName()); try { page.openEditor(new FileEditorInput(file), desc.getId()); return true; } catch (PartInitException e) { } } return false; } public void dispose() { } public void init(IWorkbenchWindow window) { } public void selectionChanged(IAction action, ISelection selection) { } }