Páginas de Assistente Java

O pacote org.eclipse.jdt.ui.wizards faculta as páginas de assistente para criar e configurar elementos Java.   São facultadas várias páginas pré-fabricas para conveniência do utilizador.

Configurar definições de construção Java

A JavaCapabilityConfigurationPage suporta a edição de definições de construção Java (configuração da pasta de fonte, projectos referenciados e bibliotecas referenciadas e exportadas).   

Se precisa de um assistente que configure um projecto para o plug-in enquanto também o configura com natureza Java e outras capacidades do projecto Java deve utilizar esta página (em vez da subclasse NewJavaProjectWizardPage).

Criar novos elementos Java

A hierarquia de páginas de assistente suporta a criação de novos elementos Java.   

A NewElementWizardPage é a classe abstracta que define a operação básica do assistente.   São fornecidas mais classes abstractas na hierarquia para personalizar funcionalidades facultadas pelos assistentes concretos.

Os assistentes de criação concreta podem ser utilizados directamente e normalmente não se destinam a ser subclasses.  

Preencher uma página do assistente de contentor de caminhos de classes

A IClasspathContainerPage da interface define a estrutura para preencher uma página de assistente que permite que um utilizador defina uma nova entrada do contentor de caminhos de classes ou edite uma existente.   Se o plug-in tiver definido o seu próprio tipo de contentor de caminhos de classes com o ponto de extensão org.eclipse.jdt.core.classpathContainerInitializer do Núcleo JDT, então provavelmente terá de definir uma página de assistente correspondente para editar e criar contentores de caminhos de classes deste tipo.

A marcação do plug-in deve facultar a extensão org.eclipse.jdt.ui.classpathContainerPageNa marcação da extensão, forneça o nome da classe que implementa a IClasspathContainerPage.  Caso precise de informações adicionais na página do seu assistente sobre o contexto do caminho de classe, sempre que este for seleccionado, pode implementar IClasspathContainerPageExtension. Se a sua página de configuração pretender devolver mais do que uma entrada, quando é adicionada, implemente IClasspathContainerPageExtension2.

Personalizar uma página do assistente

Além de utilizar as páginas pré-fabricadas, pode transformar em subclasses as páginas do assistente para adicionar os seus próprios campos de entrada ou para influenciar a criação de códigos.   Deve utilizar as classes abstractas na hierarquia da NewElementWizardPage para personalizar um assistente, em vez de transformar as classes concretas em subclasses.

Abaixo é apresentado um exemplo de uma página de assistente de nova tipo que está personalizada para criar classes de tipo de letra de teste JUnit. A página inicializa o campo de superclasse com "junit.framework.TestCase" e adiciona uma caixa de verificação que controla se os apêndices de método para os métodos setUp() e tearDown() devem ser criados.

public class TestCaseWizardPage extends NewTypeWizardPage {
   private Button fCreateStubs;

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

    /**
     * O assistente que gere esta página de assistente tem de chamar este método
     * durante a inicialização com uma selecção correspondente.
     */   
    public void init(IStructuredSelection selection) {
        IJavaElement jelem= getInitialJavaElement(selection);
        initContainerPage(jelem);
        initTypePage(jelem);
        doStatusUpdate();
    }

    private void doStatusUpdate() {
        // definir os componentes para os quais é aconselhável um estado
        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);

        // Criar campos de entrada padrão
        createContainerControls(composite, nColumns);
        createPackageControls(composite, nColumns);
        createSeparator(composite, nColumns);
        createTypeNameControls(composite, nColumns);
        createSuperClassControls(composite, nColumns);

        // Criar a caixa de verif que controla se queremos apêndices
        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);

        // Inicializar o campo supertipo e marcá-lo como só de leitura
        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); 
        }
   }
}