Strony kreatora Java

Pakiet org.eclipse.jdt.ui.wizards udostępnia strony kreatorów służące do tworzenia i konfigurowania elementów Java.  Udostępniono kilka predefiniowanych stron.

Konfigurowanie ustawień budowania Java

Klasa JavaCapabilityConfigurationPage obsługuje edytowanie ustawień budowania Java (konfiguracje folderu źródłowego, przywoływane projekty oraz przywoływane i eksportowane biblioteki).  

Jeśli w module dodatkowym potrzebny jest kreator pozwalający na skonfigurowanie projektu, w którym można także skonfigurować naturę Java i inne możliwości projektu Java, należy użyć tej strony (zamiast podklas klasy NewJavaProjectWizardPage).

Tworzenie nowych elementów Java

Hierarchia stron kreatorów obsługuje tworzenie nowych elementów Java.  

NewElementWizardPage jest klasą abstrakcyjną definiującą podstawowe operacje możliwe do wykonania w kreatorze.  Dodatkowe klasy abstrakcyjne udostępnione w hierarchii służą do dostosowywania funkcji oferowanych przez konkretnych kreatorów.

Konkretni kreatorzy tworzenia mogą być używani bezpośrednio i nie jest przewidziane tworzenie ich podklas. 

Dodawanie strony kreatora ścieżki klasy

Interfejs IClasspathContainerPage definiuje strukturę dodawania strony kreatora, która umożliwia zdefiniowanie nowego wpisu kontenera ścieżki klasy lub edytowanie istniejącego wpisu.  Jeśli w module dodatkowym zdefiniowany został własny typ kontenera ścieżki klasy (za pomocą punktu rozszerzenia modułu podstawowego JDT org.eclipse.jdt.core.classpathContainerInitializer), prawdopodobnie konieczne będzie utworzenie odpowiedniej strony kreatora umożliwiającej tworzenie i edytowanie kontenerów ścieżki tego typu.

Język znaczników modułu dodatkowego powinien udostępniać rozszerzenie org.eclipse.jdt.ui.classpathContainerPageW języku znaczników rozszerzenia należy udostępnić nazwę klasy implementującej interfejs IClasspathContainerPage.  Jeśli na stronie kreatora mają być udostępniane dodatkowe informacje o kontekście ścieżki klasy, można zaimplementować interfejs IClasspathContainerPageExtension, aby zainicjować dowolny stan zależny od wpisów wybranych w bieżącej ścieżce klasy.

Dostosowywanie strony kreatora

Oprócz korzystania z gotowych stron, można także tworzyć podklasy stron kreatorów w celu dodania własnych pól wprowadzania danych lub zmodyfikowania procesu generowania kodu.  Aby dostosować kreatora, należy używać klas abstrakcyjnych udostępnionych w hierarchii NewElementWizardPage, a nie tworzyć podklasy konkretnych klas.

Poniżej przedstawiono przykład strony kreatora nowego typu, która została dostosowana pod kątem tworzenia klas przypadków testowych JUnit. Na tej stronie pole Nadklasa jest inicjowane wartością "junit.framework.TestCase". Strona ta zawiera także pole wyboru kontrolujące, czy mają zostać utworzone szkielety metod setUp() i tearDown().

public class TestCaseWizardPage extends NewTypeWizardPage {
    private Button fCreateStubs;

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

    /**
     * Kreator zarządzający tą stroną kreatora musi wywołać tę metodę
     * podczas inicjowania wraz z odpowiednim wyborem.
     */   
    public void init(IStructuredSelection selection) {
        IJavaElement jelem= getInitialJavaElement(selection);
        initContainerPage(jelem);
        initTypePage(jelem);
        doStatusUpdate();
    }

    private void doStatusUpdate() {
        // definiowanie komponentów, dla których wymagany jest status
        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);

        // Tworzenie standardowych pól wprowadzania danych
        createContainerControls(composite, nColumns);
        createPackageControls(composite, nColumns);
        createSeparator(composite, nColumns);
        createTypeNameControls(composite, nColumns);
        createSuperClassControls(composite, nColumns);

        // Tworzenie pola wyboru kontrolującego, czy ma być tworzony szkielet
        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);

        // Inicjowanie pola Nadtyp i oznaczanie go jako pola tylko do odczytu
        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); 
        }
   }
}