org.eclipse.ui.newWizards

É possível incluir um assistente na opção de menu Arquivo->Novo no workbench usando o ponto de extensão org.eclipse.ui.newWizards. O exemplo de ferramenta leiame utiliza essa definição de ponto de extensão para incluir o assistente de Arquivo Leiame:

<extension
    point = "org.eclipse.ui.newWizards">
    <category
        id = "org.eclipse.ui.examples.readmetool.new"
        name="Exemplo de Assistentes de Criação">
    </category>
    <wizard
        id = "org.eclipse.ui.examples.readmetool.wizards.new.file"
        name = "Arquivo Leiame"
        class="org.eclipse.ui.examples.readmetool.ReadmeCreationWizard"
        category="org.eclipse.ui.examples.readmetool.new"
        icon="icons/basic/obj16/newreadme_wiz.gif">
        <description>Um exemplo de um assistente que cria amostras do arquivo Leiame
        </description>
        <selection class="org.eclipse.core.resources.IResource"/>
    </wizard>
</extension>

Category descreve onde o assistente será agrupado quando diálogo de seleção do assistente for usado para procurar e lançar um assistente. A categoria nome ("Exemplo de Assistentes de Criação") define a etiqueta que é utilizada no assistente.  O próprio assistente é atribuído à categoria.   Seu nome, ícone e descrição mostram-se todos no diálogo de seleção de assistente mostrado abaixo.

Tudo isso aparece com base na marcação no arquivo plugin.xml.  Nenhum destes códigos de plug-in é executado até que o usuário escolha o botão Avançar.  Quando isso acontecer, o workbench criará a instância de classe do assistente especificado na marcação e lhe transmitirá uma seleção esperada classe.

A classe identificada nesta extensão (ReadmeCreationWizard) deve implementar a interface INewWizard.  A maioria dos assistentes fazem isso estendendo a plataforma classe do Assistente apesar disso ser um mecanismo de implementação e não ser exigido pelo ponto de extensão.

O assistente não faz muito, mas cria as páginas em seu interior. Vamos ver primeiramente a implementação da página e em seguida voltar ao assistente.

Páginas

O workbench fornece classes de página de assistente básico que é compatível com o tipo de processamento executado para cada ponto de extensão de assistente. É possível usar essas páginas ou estendê-las para incluir processamento adicional.

O objetivo do ReadmeCreationWizard é criar um novo arquivo, incluir o conteúdo necessário no arquivo e como uma opção, abrir um editor no arquivo. Nossa página precisa definir os controles que permitem ao usuário especificar o conteúdo que vai no arquivo e se deveria ser lançado um editor.

Criamos a página de assistente, CreateReadmePage1, estendendo WizardNewFileCreationPage. Os controles de uma página de assistente são definidos de forma similar à definição dos controles de uma exibição ou de um editor. A página implementa um método createControl, criando os SWT widgets necessários como filho da Composite fornecida. Uma vez que a super classe já inclui widgets compatíveis com o processamento de novos arquivos, precisamos somente estender o método createControl na nossa página do assistente para incluir as caixas de entrada adicionais que controlam a geração de seções e a abertura do editor.

public void createControl(Composite parent) {
    // contêiner de padrão herdado e widgets de especificação do nome
    super.createControl(parent);
    Composite composite = (Composite)getControl();
    ...
    // grupo de geração de seção de amostra
    Group group = new Group(composite,SWT.NONE);
    group.setLayout(new GridLayout());
    group.setText("Geração automática de amostra de seção");
    group.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL |
        GridData.HORIZONTAL_ALIGN_FILL));
    ...
    // amostra de caixas de entrada de geração de seção
    sectionCheckbox = new Button(group,SWT.CHECK);
    sectionCheckbox.setText("Geração de amostras de títulos de seção");
    sectionCheckbox.setSelection(true);
    sectionCheckbox.addListener(SWT.Selection,this);

    subsectionCheckbox = new Button(group,SWT.CHECK);
    subsectionCheckbox.setText("Geração de amostras de títulos de seções filhas");
    subsectionCheckbox.setSelection(true);
    subsectionCheckbox.addListener(SWT.Selection,this);
    ...
    // abrir arquivo de edição da caixa de entrada
    openFileCheckbox = new Button(composite,SWT.CHECK);
    openFileCheckbox.setText("Abrir arquivos para edição ao concluir");
    openFileCheckbox.setSelection(true);
    ...
}

Você estará apto a seguir esse código se conhecer os conceitos no Kit de Ferramentas Padrão de Widgets.

Os padrões básicos para implementar uma página incluem:

A classe ReadmeCreationPage herda grande parte deste comportamento do WizardNewFileCreationPage.  Procure a implementação dessas classes para obter mais informações.

Agora que entendemos o que a página faz, voltemos ao assistente.

Assistente

O assistente é responsável por criar as páginas e fornecer a lógica "concluir".

Os padrões básicos para implementar um assistente incluem:

public void init(IWorkbench workbench,IStructuredSelection selection) {
    this.workbench = workbench;
    this.selection = selection;
    setWindowTitle("Novo Arquivo Leiame");
    setDefaultPageImageDescriptor(ReadmeImages.README_WIZARD_BANNER);
}

public void addPages() {
    mainPage = new ReadmeCreationPage(workbench, selection);
    addPage(mainPage);
}

public boolean performFinish() {
    return mainPage.finish();
}

O assistente concluído aparece dessa forma: