Seiten für Java-Assistenten

Das Paket org.eclipse.jdt.ui.wizards stellt Assistentenseiten zum Erstellen und Konfigurieren von Java-Elementen zur Verfügung.  Mehrere vorgefertigte Seiten werden zur Nutzung bereitgestellt.

Einstellungen für Java-Erstellung konfigurieren

JavaCapabilityConfigurationPage unterstützt die Bearbeitung von Einstellungen für Java-Erstellungsprogramme (Einrichten des Quellenordners, Projekte, auf die verwiesen wird, Bibliotheken, auf die verwiesen wird und exportierte Bibliotheken).  

Wenn Sie einen Assistenten bereitstellen müssen, der ein Projekt für Ihr Plug-in konfiguriert und außerdem die Java-Gattung sowie andere Java-Projekteigenschaften definiert, sollten Sie diese Seite verwenden (statt NewJavaProjectWizardPage als Unterklasse zu definieren).

Neue Java-Elemente erstellen

Eine Hierarchie von Assistentenseiten unterstützt die Erstellung neuer Java-Elemente.  

Die abstrakte Klasse NewElementWizardPage definiert die Basisoperation des Assistenten.  Zusätzliche abstrakte Klassen werden in der Hierarchie zur Verfügung gestellt, damit eine Anpassung an die Funktionen erfolgen kann, die von den konkreten Assistenten bereitgestellt werden.

Die konkreten Erstellungsassistenten können direkt verwendet werden und sollten generell nicht als Unterklasse definiert werden. 

Assistentenseite für Klassenpfadcontainer ergänzen

Die Schnittstelle IClasspathContainerPage definiert eine Struktur, mit deren Hilfe eine Assistentenseite ergänzt werden kann, auf der ein Benutzer einen neuen Eintrag für einen Klassenpfadcontainer definieren oder einen vorhandenen Eintrag bearbeiten kann.  Falls in Ihrem Plug-in ein eigener Klassenpfadcontainertyp unter Verwendung des JDT-Kernerweiterungspunktes org.eclipse.jdt.core.classpathContainerInitializer definiert ist, ist es wahrscheinlich sinnvoll, eine entsprechende Assistentenseite für die Bearbeitung und Erstellung von Klassenpfadcontainern dieses Typs zu definieren.

Die Befehlskonfiguration Ihres Plug-ins sollte die Erweiterung org.eclipse.jdt.ui.classpathContainerPage angeben.  In der Erweiterungskonfiguration geben Sie den Namen Ihrer Klasse an, die IClasspathContainerPage implementiert.  Wenn Sie auf Ihrer Assistentenseite zusätzliche Informationen zum ausgewählten Kontext eines Klassenpfads zur Verfügung stellen wollen, können Sie IClasspathContainerPageExtension implementieren, um jeden Status zu initialisieren, der von den Einträgen abhängt, die im aktuellen Klassenpfad ausgewählt sind.

Assistentenseite anpassen

Neben der Verwendung von vorgefertigten Seiten haben Sie die Möglichkeit, die Assistentenseiten als Unterklassen zu definieren und Ihre eigenen Eingabefelder hinzuzufügen oder die Codegenerierung zu beeinflussen.  Zur Anpassung eines Assistenten sollten Sie die abstrakten Klassen in der Hierarchie von NewElementWizardPage verwenden, anstatt die konkreten Klassen als Unterklassen zu definieren.

Nachfolgend ist ein Beispiel für eine Assistentenseite aufgeführt, die für die Erstellung von Anwendungsbeispielklassen für JUnit angepasst wurde. Die Seite initialisiert das Feld für die Superklasse mit der Angabe "junit.framework.TestCase" und fügt ein Markierungsfeld hinzu, mit dem gesteuert wird, ob für die Methode setUp() und tearDown() Methodenstubs erstellt werden.

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 setUp() {}"
            			newType.createMethod(tearDownMathod, null, false, null); 
        }
   }
}