[98374] Cactus test wizard
diff --git a/plugins/org.eclipse.jst.server.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.jst.server.ui/META-INF/MANIFEST.MF
index 9adaac1..e450c24 100644
--- a/plugins/org.eclipse.jst.server.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.jst.server.ui/META-INF/MANIFEST.MF
@@ -17,5 +17,7 @@
org.eclipse.jdt.junit,
org.eclipse.wst.server.core,
org.eclipse.wst.server.ui,
- org.eclipse.jst.server.core
+ org.eclipse.jst.server.core,
+ org.eclipse.ui.ide,
+ org.eclipse.jdt.ui
Eclipse-AutoStart: true
diff --git a/plugins/org.eclipse.jst.server.ui/icons/obj16/new_testcase.gif b/plugins/org.eclipse.jst.server.ui/icons/obj16/new_testcase.gif
new file mode 100644
index 0000000..1ff93cb
--- /dev/null
+++ b/plugins/org.eclipse.jst.server.ui/icons/obj16/new_testcase.gif
Binary files differ
diff --git a/plugins/org.eclipse.jst.server.ui/icons/wizban/new_test_wiz.gif b/plugins/org.eclipse.jst.server.ui/icons/wizban/new_test_wiz.gif
new file mode 100644
index 0000000..4a71e95
--- /dev/null
+++ b/plugins/org.eclipse.jst.server.ui/icons/wizban/new_test_wiz.gif
Binary files differ
diff --git a/plugins/org.eclipse.jst.server.ui/plugin.properties b/plugins/org.eclipse.jst.server.ui/plugin.properties
index 8a2af62..d238a55 100644
--- a/plugins/org.eclipse.jst.server.ui/plugin.properties
+++ b/plugins/org.eclipse.jst.server.ui/plugin.properties
@@ -11,4 +11,5 @@
pluginName=Java Server UI Support
providerName=Eclipse.org
-cactusJUnitClient=JUnit Client
\ No newline at end of file
+cactusJUnitClient=JUnit Client
+cactusServletTestCase=Servlet Test Case
diff --git a/plugins/org.eclipse.jst.server.ui/plugin.xml b/plugins/org.eclipse.jst.server.ui/plugin.xml
index f32e52c..70c7f15 100644
--- a/plugins/org.eclipse.jst.server.ui/plugin.xml
+++ b/plugins/org.eclipse.jst.server.ui/plugin.xml
@@ -48,4 +48,15 @@
name="%cactusJUnitClient"/>
</extension>
+ <extension point="org.eclipse.ui.newWizards">
+ <wizard
+ id="org.eclipse.jst.server.ui.internal.cactus.NewServletTestCaseWizard"
+ canFinishEarly="false"
+ category="org.eclipse.jdt.ui.java/org.eclipse.jdt.junit"
+ class="org.eclipse.jst.server.ui.internal.cactus.NewServletTestCaseWizard"
+ hasPages="true"
+ icon="icons/obj16/new_testcase.gif"
+ name="%cactusServletTestCase"/>
+ </extension>
+
</plugin>
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/GenericRuntimeComposite.java b/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/GenericRuntimeComposite.java
index 751d769..1e26184 100644
--- a/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/GenericRuntimeComposite.java
+++ b/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/GenericRuntimeComposite.java
@@ -59,7 +59,7 @@
wizard.setTitle(Messages.runtimeTypeTitle);
wizard.setDescription(Messages.runtimeTypeDescription);
- wizard.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_RUNTIME_TYPE));
+ wizard.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_WIZ_RUNTIME_TYPE));
createControl();
}
diff --git a/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/ImageResource.java b/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/ImageResource.java
index 9def455..7403446 100644
--- a/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/ImageResource.java
+++ b/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/ImageResource.java
@@ -45,7 +45,8 @@
private static final String URL_WIZBAN = "wizban/";
- protected static final String IMG_RUNTIME_TYPE = "runtimeType";
+ protected static final String IMG_WIZ_RUNTIME_TYPE = "wiz_runtimeType";
+ public static final String IMG_WIZ_CACTUS_TEST = "wiz_cactus_test";
/**
* Cannot construct an ImageResource. Use static methods only.
@@ -101,7 +102,8 @@
imageRegistry = new ImageRegistry();
imageDescriptors = new HashMap();
- registerImage(IMG_RUNTIME_TYPE, URL_WIZBAN + "new_runtime_wiz.gif");
+ registerImage(IMG_WIZ_RUNTIME_TYPE, URL_WIZBAN + "new_runtime_wiz.gif");
+ registerImage(IMG_WIZ_CACTUS_TEST, URL_WIZBAN + "new_test_wiz.gif");
}
/**
diff --git a/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/Messages.java b/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/Messages.java
index 36645f8..dd13be8 100644
--- a/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/Messages.java
+++ b/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/Messages.java
@@ -30,6 +30,14 @@
public static String LaunchTestAction_message_selectDebugConfiguration;
public static String LaunchTestAction_message_selectRunConfiguration;
+ public static String NewServletTestCaseWizard_WindowTitle;
+ public static String NewServletTestCaseWizard_ErrorMessageTitleMissingLibrary;
+ public static String NewServletTestCaseWizard_ErrorMessageMissingType;
+ public static String NewServletTestCaseWizard_ErrorMessageMissingLibrary;
+ public static String NewServletTestCaseWizard_ErrorTitleNew;
+ public static String NewServletTestCaseWizard_ErrorTitleCreateOfElementFailed;
+ public static String NewServletTestCaseWizard_ErrorMessageSeeErrorLog;
+
static {
NLS.initializeMessages(JavaServerUIPlugin.PLUGIN_ID + ".internal.Messages", Messages.class);
}
diff --git a/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/Messages.properties b/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/Messages.properties
index e49fde1..97930c9 100644
--- a/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/Messages.properties
+++ b/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/Messages.properties
@@ -23,4 +23,12 @@
LaunchTestAction_message_selectConfiguration=Select a Test Configuration
LaunchTestAction_message_selectDebugConfiguration=Select JUnit configuration to debug
-LaunchTestAction_message_selectRunConfiguration=Select JUnit configuration to run
\ No newline at end of file
+LaunchTestAction_message_selectRunConfiguration=Select JUnit configuration to run
+
+NewServletTestCaseWizard_WindowTitle=New JUnit Test Case
+NewServletTestCaseWizard_ErrorMessageTitleMissingLibrary=Missing library
+NewServletTestCaseWizard_ErrorMessageMissingType=Missing type
+NewServletTestCaseWizard_ErrorMessageMissingLibrary=You are missing cactus dependencies in your web project. The following libraries are required: {0}, {1}, {2}, {3} and {4}. Other versions might work but have not necessarily been tested. All libraries can be downloaded at http://jakarta.apache.org/cactus/.
+NewServletTestCaseWizard_ErrorTitleNew=New
+NewServletTestCaseWizard_ErrorTitleCreateOfElementFailed=Creation of element failed.
+NewServletTestCaseWizard_ErrorMessageSeeErrorLog=See error log for more details.
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/cactus/NewServletTestCaseWizard.java b/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/cactus/NewServletTestCaseWizard.java
new file mode 100644
index 0000000..f7fd896
--- /dev/null
+++ b/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/cactus/NewServletTestCaseWizard.java
@@ -0,0 +1,208 @@
+/*******************************************************************************
+ * Copyright (c) 2005 BEA Systems, Inc. and others
+ * 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:
+ * Daniel R. Somerfield - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.server.ui.internal.cactus;
+
+import java.io.StringWriter;
+import java.lang.reflect.InvocationTargetException;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IPackageFragmentRoot;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.junit.wizards.NewTestCaseWizardPageOne;
+import org.eclipse.jdt.junit.wizards.NewTestCaseWizardPageTwo;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jst.server.ui.internal.ImageResource;
+import org.eclipse.jst.server.ui.internal.JavaServerUIPlugin;
+import org.eclipse.jst.server.ui.internal.Messages;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.*;
+import org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation;
+import org.eclipse.ui.ide.IDE;
+import org.eclipse.ui.wizards.newresource.BasicNewResourceWizard;
+/**
+ *
+ */
+public class NewServletTestCaseWizard extends Wizard implements INewWizard {
+ private static final String SUPERCLASS_NAME = "org.apache.cactus.ServletTestCase"; //$NON-NLS-1$
+
+ protected static final String[] CLASSES_TO_CHECK = {
+ "org.apache.cactus.ServletTestCase", "junit.framework.TestCase",
+ "org.apache.commons.logging.Log", "org.aspectj.lang.JoinPoint",
+ "org.apache.commons.httpclient.HttpClient" };
+
+ protected static final String[] REQUIRED_LIBRARIES = {
+ "cactus-1.7.jar", "junit-3.8.1.jar", "aspectjrt-1.2.1.jar",
+ "commons-logging-1.0.4.jar", "commons-httpclient-2.0.2.jar" };
+
+ private IWorkbench fWorkbench;
+ private IStructuredSelection fSelection;
+ private NewTestCaseWizardPageTwo fPage2;
+ private NewTestCaseWizardPageOne fPage1;
+
+ public NewServletTestCaseWizard() {
+ super();
+ setWindowTitle(Messages.NewServletTestCaseWizard_WindowTitle);
+ setDefaultPageImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_WIZ_CACTUS_TEST));
+ }
+
+ public void init(IWorkbench workbench, IStructuredSelection selection) {
+ fWorkbench = workbench;
+ fSelection = selection;
+ }
+
+ public void addPages() {
+ super.addPages();
+ fPage2 = new NewTestCaseWizardPageTwo();
+ fPage1 = new NewTestCaseWizardPageOne(fPage2) {
+ public void createControl(Composite parent) {
+ super.createControl(parent);
+ setSuperClass(SUPERCLASS_NAME, true);
+ }
+
+ protected IStatus validateIfJUnitProject() {
+ IPackageFragmentRoot root = getPackageFragmentRoot();
+ if (root == null)
+ return Status.OK_STATUS;
+
+ IJavaProject project = root.getJavaProject();
+ try {
+ for (int i = 0; i < CLASSES_TO_CHECK.length; i++) {
+ IType type = project.findType(CLASSES_TO_CHECK[i]);
+ if (type == null) {
+ MessageDialog.openError(getShell(),
+ Messages.NewServletTestCaseWizard_ErrorMessageTitleMissingLibrary,
+ NLS.bind(Messages.NewServletTestCaseWizard_ErrorMessageMissingLibrary, REQUIRED_LIBRARIES));
+ return Status.OK_STATUS;
+ }
+ }
+ } catch (JavaModelException e) {
+ JavaServerUIPlugin.log(e);
+ }
+ return Status.OK_STATUS;
+ }
+ };
+ addPage(fPage1);
+ fPage1.init(getSelection());
+ addPage(fPage2);
+
+ }
+
+ private IStructuredSelection getSelection() {
+ return fSelection;
+ }
+
+ public boolean performFinish() {
+ if (finishPage(fPage1.getRunnable())) {
+ IType newClass = fPage1.getCreatedType();
+
+ IResource resource = newClass.getCompilationUnit().getResource();
+ if (resource != null) {
+ BasicNewResourceWizard.selectAndReveal(resource, fWorkbench
+ .getActiveWorkbenchWindow());
+ openResource(resource);
+ // checkLibraryMissing();
+ }
+ return true;
+ }
+ return false;
+ }
+
+ /*private void checkLibraryMissing() {
+ IType newClass = fPage1.getCreatedType();
+ IJavaProject project = newClass.getJavaProject();
+ try {
+ IType type = project.findType(SUPERCLASS_NAME);
+ MessageDialog.openError(getShell(), NLS.bind(
+ Messages.NewServletTestCaseWizard_ErrorMessageMissingLibrary, REQUIRED_LIBRARIES),
+ Messages.NewServletTestCaseWizard_ErrorMessageMissingType);
+ } catch (JavaModelException e) {
+ JavaServerUIPlugin.log(e);
+ }
+ }*/
+
+ protected boolean finishPage(IRunnableWithProgress runnable) {
+ IRunnableWithProgress op = new WorkspaceModifyDelegatingOperation(runnable);
+ try {
+ PlatformUI.getWorkbench().getProgressService().runInUI(getContainer(), op,
+ ResourcesPlugin.getWorkspace().getRoot());
+ } catch (InvocationTargetException e) {
+ String title = Messages.NewServletTestCaseWizard_ErrorTitleNew; // NewJUnitWizard_op_error_title
+ String message = Messages.NewServletTestCaseWizard_ErrorTitleCreateOfElementFailed; // NewJUnitWizard_op_error_message
+ // ExceptionHandler.handle(e, shell, title, message);
+ displayMessageDialog(e, e.getMessage(), getShell(), title, message);
+ return false;
+ } catch (InterruptedException e) {
+ return false;
+ }
+ return true;
+ }
+
+ public static void displayMessageDialog(Throwable t, String exceptionMessage,
+ Shell shell, String title, String message) {
+ StringWriter msg = new StringWriter();
+ if (message != null) {
+ msg.write(message);
+ msg.write("\n\n"); //$NON-NLS-1$
+ }
+ if (exceptionMessage == null || exceptionMessage.length() == 0)
+ msg.write(Messages.NewServletTestCaseWizard_ErrorMessageSeeErrorLog);
+ else
+ msg.write(exceptionMessage);
+ MessageDialog.openError(shell, title, msg.toString());
+ }
+
+ protected void openResource(final IResource resource) {
+ if (resource.getType() == IResource.FILE) {
+ final IWorkbenchPage activePage = getActivePage();
+ if (activePage != null) {
+ final Display display = Display.getDefault();
+ if (display != null) {
+ display.asyncExec(new Runnable() {
+ public void run() {
+ try {
+ IDE.openEditor(activePage, (IFile) resource, true);
+ } catch (PartInitException e) {
+ JavaServerUIPlugin.log(e);
+ }
+ }
+ });
+ }
+ }
+ }
+ }
+
+ public static IWorkbenchPage getActivePage() {
+ IWorkbenchWindow activeWorkbenchWindow = getActiveWorkbenchWindow();
+ if (activeWorkbenchWindow == null)
+ return null;
+ return activeWorkbenchWindow.getActivePage();
+ }
+
+ public static IWorkbenchWindow getActiveWorkbenchWindow() {
+ IWorkbench workbench = JavaServerUIPlugin.getInstance().getWorkbench();
+ if (workbench != null)
+ return workbench.getActiveWorkbenchWindow();
+
+ return null;
+ }
+}
\ No newline at end of file