Java wizard pages

The org.eclipse.jdt.ui.wizards package provides wizard pages for creating and configuring Java elements.  Several prefabricated pages are provided for your use.

Creating new Java elements

A hierarchy of wizard pages support the creation of new Java elements.  

NewElementWizardPage is the abstract class that defines the basic operation of the wizard.  Additional abstract classes are provided in the hierarchy for making customizations to the functionality provided by the concrete wizards.

The concrete creation wizards can be used directly and generally are not intended to be subclassed. 

Contributing a classpath container wizard page

The interface IClasspathContainerPage defines a structure for contributing a wizard page that allows a user to define a new classpath container entry or edit an existing one.  If your plug-in has defined its own type of classpath container using the JDT Core org.eclipse.jdt.core.classpathContainerInitializer extension point, then you will probably want to define a corresponding wizard page for editing and creating classpath containers of this type.

Your plug-in's markup should provide an extension org.eclipse.jdt.ui.classpathContainerPage In the extension markup, you provide the name of your class that implements IClasspathContainerPage.  If you need additional information in your wizard page about the classpath's context when it is selected, you can implement IClasspathContainerPageExtension. If your configuration page wants to returns more than one entry when being added, implement IClasspathContainerPageExtension2.

Customizing a wizard page

Besides using prefabricated pages, you can subclass the wizard pages to add your own input fields or to influence the code generation.  You should use the abstract classes in the NewElementWizardPage hierarchy to customize a wizard rather than subclassing the concrete classes.

Below is a sample of a new type wizard page that is customized to create JUnit test case classes. The page initializes the super class field with "junit.framework.TestCase" and adds a checkbox that controls whether method stubs for the setUp() and tearDown() method are to be created.

public class TestCaseWizardPage extends NewTypeWizardPage {
    private Button fCreateStubs;

    public TestCaseWizardPage() {
        super(true, "TestCaseWizardPage");
    }

    /**
     * The wizard managing this wizard page must call this method
     * during initialization with a corresponding selection.
     */   
    public void init(IStructuredSelection selection) {
        IJavaElement jelem= getInitialJavaElement(selection);
        initContainerPage(jelem);
        initTypePage(jelem);
        doStatusUpdate();
    }

    private void doStatusUpdate() {
        // define the components for which a status is desired
        IStatus[] status= new IStatus[] {
            fContainerStatus,
            isEnclosingTypeSelected() ? fEnclosingTypeStatus : fPackageStatus,
            fTypeNameStatus,
        };
        updateStatus(status);
    }


    protected void handleFieldChanged(String fieldName) {
        super.handleFieldChanged(fieldName);

        doStatusUpdate();
    }
 
    public void createControl(Composite parent) {
        initializeDialogUnits(parent);
        Composite composite= new Composite(parent, SWT.NONE);
        int nColumns= 4;
        GridLayout layout= new GridLayout();
        layout.numColumns= nColumns;
        composite.setLayout(layout);

        // Create the standard input fields
        createContainerControls(composite, nColumns);
        createPackageControls(composite, nColumns);
        createSeparator(composite, nColumns);
        createTypeNameControls(composite, nColumns);
        createSuperClassControls(composite, nColumns);

        // Create the checkbox controlling whether we want stubs
        fCreateStubs= new Button(composite, SWT.CHECK);
        fCreateStubs.setText("Add 'setUp()' and 'tearDown()' to new class");
        GridData gd= new GridData();
        gd.horizontalSpan= nColumns;
        fCreateStubs.setLayoutData(gd);

        setControl(composite);

        // Initialize the super type field and mark it as read-only
        setSuperClass("junit.framework.TestCase", false);
    }

    protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor) throws CoreException {
        if (fCreateStubs.getSelection()) {
            String setUpMathod= "public void setUp() {}";
            newType.createMethod(setUpMathod, null, false, null);

            String tearDownMathod= "public void tearDown() {}";
            newType.createMethod(tearDownMathod, null, false, null); 
        }
   }
}