Criando plug-in para o Eclipse

Olá pessoal!
Estou criando um plug-in para o eclipse com o objetivo e auxiliar o programador a criar arquivos de scripts de banco de dados.
Esses arquivos devem obedecer a uma nomenclatura específica para que Flyway (http://code.google.com/p/flyway/) possa executá-los corretamente.
Gostaria que o funcionamento fosse semelhante à criação de uma classe Java, ou seja, clica-se com o botão direito sobre a pasta desejada e depois abre-se uma janela para que sejam preenchidas algumas informações, como nome…
Já consegui colocar o menu e fazê-lo executar um “Hello World!!!”, mas não sei como chamar uma janela com os campos para criação do arquivo.
Anexei duas imagem com aquilo que já fiz.
Obrigado



Tenho alguns projetos de plugins aki, é mto dificil achar ajuda sobre isso aki no guj, vou colocar um exemplo de criacao de campo qualquer duvida va perguntando ai.

FormToolkit	toolkit = new FormToolkit(parent.getDisplay());
			toolkit.setOrientation(SWT.CENTER);
			Composite composite = new Composite(parent, SWT.APPLICATION_MODAL);
			composite.setLayout(new FillLayout(SWT.CENTER));
			composite.setSize(50, 50);
			final ScrolledForm form = toolkit.createScrolledForm(composite);
			form.setLayoutData(new GridData(5, 5));
			form.setText("Exportar Projeto");

			form.getBody().setLayout(new GridLayout(2, false));
			toolkit.createLabel(form.getBody(), "Projeto: ", SWT.LEFT);
		toolkit.createLabel(form.getBody(), "Servidor Destino: ", SWT.LEFT);
		destinoCombo = new Combo(form.getBody(), SWT.READ_ONLY);
		destinoCombo
				.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));

		toolkit.createLabel(form.getBody(), "Servidor Origem: ", SWT.LEFT);
		origemCombo = new Combo(form.getBody(), SWT.READ_ONLY);
		origemCombo.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
		toolkit.createLabel(form.getBody(), "Servidor Destino: ", SWT.LEFT);
		destinoCombo = new Combo(form.getBody(), SWT.READ_ONLY);
		destinoCombo
				.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));

Uma otima referencia pra pesquisa >>> http://lubospeclipse.wordpress.com/eclipse-plugin-and-rcp-development-notes-2-2/

A grosso modo, você teria uma action ligada ao item de menu. Dessa forma você pode ligá-la a um atalho de teclado, a um botão na barra de ferramentas, etc.

Sugiro que você dê uma olhada no site do Lars Vogel, ele é uma referência em Eclipse.

http://www.vogella.com/articles/EclipseRCP/article.html

Apesar de esse artigo ser para criação de aplicações na plataforma, ele serve para criação de plugins, já que o processo é semelhante (a diferença é que na plataforma você configura algumas coisinhas a mais, mas as suas funcionalidades acabam virando plugins e features).

Valeu galera, mas meu problema é um pouco mais específico.
Gostaria de saber como criar uma janela e como chamá-la através do menu que criei.
Abaixo o meu arquivo plugin.xml:

<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
   <extension
         point="org.eclipse.ui.menus">
      <menuContribution
            locationURI="popup:org.eclipse.jdt.ui.PackageExplorer">
         <command
               commandId="SamplerHandlerId"
               label="Novo script Flyway"
               style="push">
         </command>
      </menuContribution>
   </extension>
   
   <extension
         point="org.eclipse.ui.commands">
      <command
            defaultHandler="de.vogella.plugin.htmlconverter.handler.SamplerHandler"
            id="SamplerHandlerId"
            name="Sample">
      </command>
   </extension>

</plugin>

[quote=alissonmn]Valeu galera, mas meu problema é um pouco mais específico.
Gostaria de saber como criar uma janela e como chamá-la através do menu que criei.
Abaixo o meu arquivo plugin.xml:

[code]

<?xml version="1.0" encoding="UTF-8"?> <?eclipse version="3.4"?>




[/code][/quote]

Entendo que seu problema é específico, mas é bem básico e por isso sugerimos alguns links pra você dar uma vasulhada. O Eclipse possui uma plataforma com conceitos muito bem definidos e conhecer esses conceitos é a chave pra se trabalhar com a plataforma.

Você já tem alguma experiência construindo plugins pro Eclipse? Já tentou olhar a wiki (http://wiki.eclipse.org/index.php/Menu_Contributions)? O tutorial de commands do Vogel (http://www.vogella.com/articles/EclipseCommands/article.html)? O tutorial de plugins dele (http://www.vogella.com/articles/EclipsePlugIn/article.html)?

No tutorial de plugins ele faz uso da plataforma 4.x, mas dê uma procurada na página que talvez tenha o tutorial da 3.x.

Isso é simples cara cria uma action e é só chamar um shell veja:


public void run(IAction action) {
		try {
			GridLayout layout = new GridLayout();
			layout.numColumns = 1;
			layout.marginWidth = 2;
			layout.marginHeight = 2;

			Shell shell = new Shell();
			shell.setLayout(layout);

			SashForm form = new SashForm(shell, SWT.HORIZONTAL);
			form.setLayout(layout);
			shell.setText("Selecione um Servidor");
			Composite child1 = new Composite(form, SWT.NONE);
			child1.setLayout(layout);
			createCombo(child1);
			createButon(child1, shell);
			shell.pack();
			shell.open();

			/*
			 * InputDialog serverPath = new InputDialog(sh,
			 * "Leandrus Log Reader", "Informe o path do log seu Imbecil:",
			 * "\\\\goioere\\JbossLog\\console.log", null); serverPath.open();
			 */

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

Valeu galera. É isso mesmo que eu precisava!
Consegui implementar a tela e fazê-la criar um arquivo “.sql”, mas o eclipse não reconhece o arquivo e, ao invés de abri-lo no editor, pergunta-me com qual programa eu quero abri-lo.
Encontrei uma possível solução (http://stackoverflow.com/questions/1624054/eclipse-plugin-create-a-new-file).
Tenho que criar o arquivo usando IFile e não um FileWriter como estou fazendo. Minha dúvida é: Para criar um arquivo IFile, tenho que passar um InputStream. Para buscar o InputStream devo usar o comando “Activator.getDefault().getBundle().getEntry([color=red]caminho_arquivo[/color]).openStream()”. Percebam que o parâmetro para buscar o input é o caminho do arquivo. Como passar esse caminho se o arquivo ainda não existe? Quando faço isso, dá NullPointerException.

IProject currentProject = getCurrentSelectedProject();					
IFile file = currentProject.getFile(caminho_arquivo);
InputStream input = Activator.getDefault().getBundle().getEntry(caminho_arquivo).openStream();
...
file.create(input, false, null);

Alterei meu código para não buscar o inputStream de um bundle, mas criei um ByteArrayInputStream.
Agora, ao criar o arquivo, é gerado um erro dizendo que o resource não existe: [color=red]Resource ‘/teste/Users/joao/workspace/runtime-EclipseApplication/teste/src/migrations/1.4.0’ does not exist[/color]
Debugando o código, meu IPath loc está assim: [color=darkred]C:/Users/joao/workspace/runtime-EclipseApplication/teste/src/migrations/1.4.0/teste.sql[/color]

IPath loc = ((IFolder) selecionado).getLocation();
loc = loc.append("/teste.sql");

try {
    IProject currentProject = getCurrentSelectedProject();
    IFile ifile = currentProject.getFile(loc);
    String contents = "Whatever";
    InputStream input = new ByteArrayInputStream(contents.getBytes());
    ifile.create(input, false, null);
} catch (CoreException e) {
    MessageDialog.openError(shell, "Erro", "Erro ao criar o arquivo. ERRO: "+e.getMessage());
}