Java tutorial
/*<Dynamic Refactoring Plugin For Eclipse 2.0 - Plugin that allows to perform refactorings on Java code within Eclipse, as well as to dynamically create and manage new refactorings> Copyright (C) 2009 Laura Fuente De La Fuente This file is part of Foobar Foobar is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.*/ package dynamicrefactoring.interfaz.dynamic; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintStream; import java.net.MalformedURLException; import org.apache.commons.io.FileUtils; import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.filefilter.FileFilterUtils; import org.eclipse.swt.SWT; import org.eclipse.swt.browser.Browser; import org.eclipse.swt.custom.ScrolledComposite; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.TabFolder; import org.eclipse.swt.widgets.TabItem; import com.google.common.base.Preconditions; import com.google.common.base.Throwables; import com.java2html.Java2HTML; import com.swtdesigner.SWTResourceManager; import dynamicrefactoring.domain.DynamicRefactoringDefinition; import dynamicrefactoring.domain.RefactoringExample; /** * Pestaa con los ejemplos de una refactorizacin. * * @author <A HREF="mailto:lfd0002@alu.ubu.es">Laura Fuente de la Fuente</A> */ public class DynamicExamplesTab { /** * Pestaa asociada a los ejemplos de la refactorizacin. */ private TabItem tab; /** * La definicin de la refactorizacin. */ protected DynamicRefactoringDefinition refactoringDefinition; /** * Crea la pestaa con el resumen de la refactorizacin. * * @param parent * el contenedor de pestaas que contendr esta pestaa. * @param definition * la definicin de la refactorizacin. */ public DynamicExamplesTab(TabFolder parent, DynamicRefactoringDefinition definition) { refactoringDefinition = definition; final ScrolledComposite scrolledComposite = new ScrolledComposite(parent, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); tab = new TabItem(parent, SWT.NONE); tab.setControl(scrolledComposite); scrolledComposite.setExpandHorizontal(true); scrolledComposite.setExpandVertical(true); // Pestaa de Ejemplos. final Composite cExamples = new Composite(scrolledComposite, SWT.NONE); cExamples.setLocation(0, 0); cExamples.setSize(872, 390); scrolledComposite.setContent(cExamples); // generamos los ficheros java2HTML para ser mostrasdos en la ventana generarHTMLS(); // En caso de existir un solo ejemplo if (definition.getExamples().size() == 1) { tab.setText(Messages.DynamicExamplesTab_Example); final Label nameLabel = new Label(cExamples, SWT.NONE); nameLabel.setAlignment(SWT.CENTER); nameLabel.setText(Messages.DynamicExamplesTab_ExampleOf + " " + definition.getName()); nameLabel.setFont(SWTResourceManager.getFont("Tahoma", 14, SWT.NONE)); //$NON-NLS-1$ nameLabel.setBounds(10, 15, 860, 39); final Label separator1 = new Label(cExamples, SWT.SEPARATOR | SWT.VERTICAL); separator1.setBounds(430, 44, 13, 340); final Label ejemploAntes = new Label(cExamples, SWT.NONE); ejemploAntes.setAlignment(SWT.CENTER); ejemploAntes.setText(Messages.DynamicExamplesTab_Before + ": "); ejemploAntes.setFont(SWTResourceManager.getFont("Tahoma", 12, SWT.BOLD)); //$NON-NLS-1$ ejemploAntes.setBounds(10, 53, 414, 20); final Browser ejemplo_antes = new Browser(cExamples, SWT.BORDER); ejemplo_antes.setBounds(10, 76, 414, 307); final Label ejemploDespues = new Label(cExamples, SWT.NONE); ejemploDespues.setAlignment(SWT.CENTER); ejemploDespues.setText(Messages.DynamicExamplesTab_After + ": "); ejemploDespues.setFont(SWTResourceManager.getFont("Tahoma", 12, SWT.BOLD)); //$NON-NLS-1$ ejemploDespues.setBounds(443, 53, 414, 20); final Browser ejemplo_despues = new Browser(cExamples, SWT.BORDER); ejemplo_despues.setBounds(443, 76, 414, 307); try { final RefactoringExample firstExample = refactoringDefinition.getExamplesAbsolutePath().get(0); ejemplo_antes .setUrl(new File(getExampleHtmlFile(firstExample.getBefore())).toURI().toURL().toString()); ejemplo_despues .setUrl(new File(getExampleHtmlFile(firstExample.getAfter())).toURI().toURL().toString()); } catch (MalformedURLException e) { throw Throwables.propagate(e); } } else if (definition.getExamples().size() == 2) { tab.setText(Messages.DynamicExamplesTab_Examples); final Label nameLabel = new Label(cExamples, SWT.NONE); nameLabel.setAlignment(SWT.CENTER); nameLabel.setText(Messages.DynamicExamplesTab_ExamplesOf + " " + definition.getName()); nameLabel.setFont(SWTResourceManager.getFont("Tahoma", 14, SWT.NONE)); //$NON-NLS-1$ nameLabel.setBounds(10, 15, 860, 35); final Label separator1 = new Label(cExamples, SWT.SEPARATOR | SWT.VERTICAL); separator1.setBounds(430, 44, 13, 340); final Label ejemplo1 = new Label(cExamples, SWT.NONE); ejemplo1.setAlignment(SWT.CENTER); ejemplo1.setText(Messages.DynamicExamplesTab_Example + " 1: "); ejemplo1.setFont(SWTResourceManager.getFont("Tahoma", 12, SWT.BOLD)); //$NON-NLS-1$ ejemplo1.setBounds(10, 47, 414, 20); final Label ejemploantes1 = new Label(cExamples, SWT.NONE); ejemploantes1.setText(Messages.DynamicExamplesTab_Before + ": "); ejemploantes1.setFont(SWTResourceManager.getFont("Tahoma", 9, SWT.BOLD)); //$NON-NLS-1$ ejemploantes1.setBounds(10, 67, 414, 15); final Browser ejemplo_antes1 = new Browser(cExamples, SWT.BORDER); ejemplo_antes1.setBounds(10, 87, 414, 135); final Label ejemplodespues1 = new Label(cExamples, SWT.NONE); ejemplodespues1.setText(Messages.DynamicExamplesTab_After + ": "); ejemplodespues1.setFont(SWTResourceManager.getFont("Tahoma", 9, SWT.BOLD)); //$NON-NLS-1$ ejemplodespues1.setBounds(10, 228, 414, 15); final Browser ejemplo_despues1 = new Browser(cExamples, SWT.BORDER); ejemplo_despues1.setBounds(10, 248, 414, 135); final Label ejemplo2 = new Label(cExamples, SWT.NONE); ejemplo2.setAlignment(SWT.CENTER); ejemplo2.setText(Messages.DynamicExamplesTab_Example + " 2: "); ejemplo2.setFont(SWTResourceManager.getFont("Tahoma", 12, SWT.BOLD)); //$NON-NLS-1$ ejemplo2.setBounds(443, 47, 414, 20); final Label ejemploantes2 = new Label(cExamples, SWT.NONE); ejemploantes2.setText(Messages.DynamicExamplesTab_Before + ": "); ejemploantes2.setFont(SWTResourceManager.getFont("Tahoma", 9, SWT.BOLD)); //$NON-NLS-1$ ejemploantes2.setBounds(443, 67, 414, 15); final Browser ejemplo_antes2 = new Browser(cExamples, SWT.BORDER); ejemplo_antes2.setBounds(443, 87, 414, 135); final Label ejemplodespues2 = new Label(cExamples, SWT.NONE); ejemplodespues2.setText(Messages.DynamicExamplesTab_After + ": "); ejemplodespues2.setFont(SWTResourceManager.getFont("Tahoma", 9, SWT.BOLD)); //$NON-NLS-1$ ejemplodespues2.setBounds(443, 228, 414, 15); final Browser ejemplo_despues2 = new Browser(cExamples, SWT.BORDER); ejemplo_despues2.setBounds(443, 248, 414, 135); try { final RefactoringExample firstExample = refactoringDefinition.getExamplesAbsolutePath().get(0); final RefactoringExample secondExample = refactoringDefinition.getExamplesAbsolutePath().get(0); ejemplo_antes1 .setUrl(new File(getExampleHtmlFile(firstExample.getBefore())).toURI().toURL().toString()); ejemplo_despues1 .setUrl(new File(getExampleHtmlFile(firstExample.getAfter())).toURI().toURL().toString()); ejemplo_antes2 .setUrl(new File(getExampleHtmlFile(secondExample.getBefore())).toURI().toURL().toString()); ejemplo_despues2 .setUrl(new File(getExampleHtmlFile(secondExample.getAfter())).toURI().toURL().toString()); } catch (MalformedURLException e) { throw Throwables.propagate(e); } } } /** * Obtiene la ruta absoluta del fichero de ejemplo en formato html * dada la ruta absoluta del fichero de ejemplo con extension .txt. * * @param exampleFile ruta absoluta del fichero de ejemplo .txt * @return ruta absoluta del fichero de ejemplo html */ private String getExampleHtmlFile(final String exampleFile) { return exampleFile.replace(".txt", ".java") + ".html"; } /** * Copia los ficheros des ejemplo modificando su nombre para darles * otra extension. * * @param toExtension extensin */ private void copyExampleFilesWithOtherExtension(String toExtension) { for (RefactoringExample ejemplo : refactoringDefinition.getExamplesAbsolutePath()) { if (!FilenameUtils.getExtension(ejemplo.getBefore()).equals("java")) { copyFileWithOtherExtension(ejemplo.getBefore(), toExtension); } if (!FilenameUtils.getExtension(ejemplo.getAfter()).equals("java")) { copyFileWithOtherExtension(ejemplo.getAfter(), toExtension); } } } /** * Copia el fichero cambiando su extension a la pasada. * * @param file fichero a renombrar * @param toExtension extension destino */ private void copyFileWithOtherExtension(String file, String toExtension) { Preconditions.checkArgument(new File(file).exists(), String.format("The source file %s doesn't exist.", file)); try { FileUtils.copyFile(new File(file), new File(file.replace("." + FilenameUtils.getExtension(file), toExtension))); } catch (IOException e) { Throwables.propagate(e); } } /** * Genera htmls mediante java2html para visualizar los ejemplos de la * refactorizacin en un navegador html. */ private void generarHTMLS() { // directorio de la refactorizacion String dirRefactoring = new File(refactoringDefinition.getExamplesAbsolutePath().get(0).getAfter()) .getParent(); // Cambiamos de extensin los ficheros .txt por .java para que puedan // ser interpretados // por java2HTML copyExampleFilesWithOtherExtension(".java"); try { // redirijo la consola a un fichero .txt para que no salga las // trazas de la // biblioteca java2html. PrintStream out = new PrintStream( new FileOutputStream(dirRefactoring + File.separator + "consola.txt")); System.setOut(out); Java2HTML java2html = new Java2HTML(); String[] dir = new String[1]; dir[0] = dirRefactoring; java2html.setJavaDirectorySource(dir); java2html.setDestination(dirRefactoring); java2html.buildJava2HTML(); out.close(); } catch (Exception e) { e.printStackTrace(); } } /** * Elimina todos los ficheros del directorio pasado que tengan * la extension dada. * * @param dirRefactoring directorio del que se eliminaran los ficheros * @param extension extension de los ficheros */ private void deleteAllFilesFromDirWithExtension(String dirRefactoring, String extension) { for (String file : new File(dirRefactoring).list(FileFilterUtils.suffixFileFilter(extension))) { FileUtils.deleteQuietly(new File(file)); } } }