Java tutorial
/******************************************************************************* * Copyright (c) 2004 IBM Corporation and others. All rights reserved. This * program and the accompanying materials are made available under the terms of * the Eclipse Public License v1.0 which accompanies this distribution, and is * available at http://www.eclipse.org/legal/epl-v10.html * * Contributors: Sian January - initial version * ... ******************************************************************************/ package org.eclipse.ajdt.internal.ui.refactoring; import java.lang.reflect.InvocationTargetException; import java.util.HashMap; import java.util.Map; import org.eclipse.ajdt.core.BuildConfig; import org.eclipse.ajdt.core.codeconversion.CodeChecker; import org.eclipse.ajdt.internal.ui.text.UIMessages; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.IPackageFragment; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.ProgressMonitorDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation; /** * Dialog that renames file extensions for an entire project. Three options are * presented to the user - convert all extensions to .java, convert all * extensions to .aj and convert aspects to .aj and classes to .java. */ public class RenameFileExtensionsDialog extends Dialog { // The project private IProject project; private Button convertAllToJavaButton; private Button convertAllToAJButton; private Button convertAspectsToAJButton; private Button includeFilesNotInBuildButton; private Button updateBuildConfigsButton; /** * @param parentShell */ public RenameFileExtensionsDialog(Shell parentShell, IProject project) { super(parentShell); this.project = project; } /** * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell) */ protected void configureShell(Shell shell) { super.configureShell(shell); shell.setText(UIMessages.Refactoring_ConvertFileExtensions); } protected Control createDialogArea(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(); layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN); layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN); layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING); layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING); composite.setLayout(layout); composite.setLayoutData(new GridData(GridData.FILL_BOTH)); convertAspectsToAJButton = new Button(composite, SWT.RADIO); convertAspectsToAJButton.setText(UIMessages.Refactoring_ConvertAspectsToAJAndClassesToJava); convertAspectsToAJButton.setSelection(true); convertAllToAJButton = new Button(composite, SWT.RADIO); convertAllToAJButton.setText(UIMessages.Refactoring_ConvertAllToAJ); convertAllToJavaButton = new Button(composite, SWT.RADIO); convertAllToJavaButton.setText(UIMessages.Refactoring_ConvertAllToJava); new Label(composite, SWT.NONE); includeFilesNotInBuildButton = new Button(composite, SWT.CHECK); includeFilesNotInBuildButton.setText(UIMessages.Refactoring_IncludeFilesNotInBuild); includeFilesNotInBuildButton.setSelection(true); updateBuildConfigsButton = new Button(composite, SWT.CHECK); updateBuildConfigsButton.setText(UIMessages.Refactoring_UpdateBuildConfigs); updateBuildConfigsButton.setSelection(true); applyDialogFont(composite); return composite; } protected void okPressed() { boolean updateBuildConfigs = updateBuildConfigsButton.getSelection(); if (convertAllToAJButton.getSelection()) { convertAllExtensions(true, includeFilesNotInBuildButton.getSelection(), updateBuildConfigs); } else if (convertAllToJavaButton.getSelection()) { convertAllExtensions(false, includeFilesNotInBuildButton.getSelection(), updateBuildConfigs); } else if (convertAspectsToAJButton.getSelection()) { convertAspectsToAJAndOthersToJava(includeFilesNotInBuildButton.getSelection(), updateBuildConfigs); } super.okPressed(); } /** * Convert aspects' file extensions to .aj, and classes and interfaces to * .java. Also converts files containing any inner aspects or pointcuts to * .aj. * * @param includeNotBuiltFiles - * include files not included in the active build configuration. * @param monitor - * progress monitor * @param updateBuildConfigs - * update build configurations */ private void convertAspectsToAJAndOthersToJava(final boolean includeNonBuiltFiles, final boolean updateBuildConfigs) { IRunnableWithProgress runnable = new IRunnableWithProgress() { public void run(IProgressMonitor monitor) { IJavaProject jp = JavaCore.create(project); try { IPackageFragment[] packages = jp.getPackageFragments(); monitor.beginTask(UIMessages.Refactoring_ConvertingFileExtensions, packages.length); // map of old to new names - needed to update build config // files. Map oldToNewNames = new HashMap(); for (int i = 0; i < packages.length; i++) { if (!(packages[i].isReadOnly())) { try { ICompilationUnit[] files = packages[i].getCompilationUnits(); for (int j = 0; j < files.length; j++) { IResource resource = files[j].getResource(); if (!includeNonBuiltFiles && !(BuildConfig.isIncluded(resource))) { // do not rename this file if it is not // active continue; } boolean isAspect = CodeChecker.containsAspectJConstructs((IFile) resource); if (!isAspect && resource.getFileExtension().equals("aj")) { //$NON-NLS-1$ RenamingUtils.renameFile(false, resource, monitor, oldToNewNames); } else if (isAspect && resource.getFileExtension().equals("java")) { //$NON-NLS-1$ RenamingUtils.renameFile(true, resource, monitor, oldToNewNames); } } } catch (JavaModelException e) { } } monitor.worked(1); } if (updateBuildConfigs) { RenamingUtils.updateBuildConfigurations(oldToNewNames, project, monitor); } } catch (JavaModelException e) { } } }; IRunnableWithProgress op = new WorkspaceModifyDelegatingOperation(runnable); try { new ProgressMonitorDialog(getShell()).run(true, true, op); } catch (InvocationTargetException e) { } catch (InterruptedException e) { } } /** * Convert all the extensions for files in a project * * @param convertToAJ - * if true convert to .aj, otherwise convert to .java * @param includeNotBuiltFiles - * include files not included in the active build configuration. * @param updateBuildConfigs - * update build configuration files if true. */ private void convertAllExtensions(final boolean convertToAJ, final boolean includeNotBuiltFiles, final boolean updateBuildConfigs) { IRunnableWithProgress runnable = new IRunnableWithProgress() { public void run(IProgressMonitor monitor) { IJavaProject jp = JavaCore.create(project); try { IPackageFragment[] packages = jp.getPackageFragments(); monitor.beginTask(UIMessages.Refactoring_ConvertingFileExtensions, packages.length); // Map of old to new names - needed to update build config // files. Map oldNamesToNewNames = new HashMap(); for (int i = 0; i < packages.length; i++) { if (!(packages[i].isReadOnly())) { try { ICompilationUnit[] files = packages[i].getCompilationUnits(); for (int j = 0; j < files.length; j++) { IResource resource = files[j].getResource(); if (!includeNotBuiltFiles && !(BuildConfig.isIncluded(resource))) { // do not rename this file if it is not // active continue; } if ((!convertToAJ && resource.getFileExtension().equals("aj")) //$NON-NLS-1$ || (convertToAJ && resource.getFileExtension().equals("java"))) { //$NON-NLS-1$ RenamingUtils.renameFile(convertToAJ, resource, monitor, oldNamesToNewNames); } } } catch (JavaModelException e) { } } monitor.worked(1); } if (updateBuildConfigs) { RenamingUtils.updateBuildConfigurations(oldNamesToNewNames, project, monitor); } } catch (JavaModelException e) { } } }; IRunnableWithProgress op = new WorkspaceModifyDelegatingOperation(runnable); try { new ProgressMonitorDialog(getShell()).run(true, true, op); } catch (InvocationTargetException e) { } catch (InterruptedException e) { } } }