org.eclipse.ajdt.internal.ui.refactoring.RenameToAJAction.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.ajdt.internal.ui.refactoring.RenameToAJAction.java

Source

/**********************************************************************
 * 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.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.lang.reflect.InvocationTargetException;
import java.util.Iterator;
import java.util.List;

import org.eclipse.ajdt.core.AJProperties;
import org.eclipse.ajdt.internal.ui.ajde.AJDTErrorHandler;
import org.eclipse.ajdt.internal.ui.text.UIMessages;
import org.eclipse.ajdt.ui.AspectJUIPlugin;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.ltk.core.refactoring.resource.RenameResourceChange;
import org.eclipse.ui.IActionDelegate;
import org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation;

/**
 * Rename the file extension of a file to .aj.
 */
public class RenameToAJAction implements IActionDelegate {

    private ISelection selection;

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
     */
    public void run(IAction action) {
        if (selection instanceof StructuredSelection) {
            IRunnableWithProgress runnable = new IRunnableWithProgress() {
                public void run(IProgressMonitor monitor) {
                    StructuredSelection sel = (StructuredSelection) selection;
                    for (Iterator iter = sel.iterator(); iter.hasNext();) {
                        Object object = iter.next();
                        if (object instanceof IAdaptable) {

                            IResource file = (IResource) ((IAdaptable) object).getAdapter(IResource.class);
                            if (file != null) {
                                IProject project = file.getProject();
                                String name = file.getName();
                                name = name.substring(0, name.indexOf('.'));
                                RenameResourceChange change = new RenameResourceChange(file.getFullPath(),
                                        name + ".aj"); //$NON-NLS-1$
                                try {
                                    change.perform(monitor);
                                } catch (CoreException e) {
                                    AJDTErrorHandler.handleAJDTError(UIMessages.Refactoring_ErrorRenamingResource,
                                            e);
                                }
                                if (project != null) {
                                    updateBuildConfigs(monitor, project, name);
                                }
                            }
                        }
                    }
                }
            };

            IRunnableWithProgress op = new WorkspaceModifyDelegatingOperation(runnable);
            try {
                new ProgressMonitorDialog(AspectJUIPlugin.getDefault().getDisplay().getActiveShell()).run(true,
                        true, op);
            } catch (InvocationTargetException e) {
            } catch (InterruptedException e) {
            }
        }
    }

    /**
     * @param monitor
     * @param project
     * @param name
     */
    private void updateBuildConfigs(IProgressMonitor monitor, IProject project, String name) {
        List buildConfigs = AJProperties.getAJPropertiesFiles(project);
        for (Iterator iter = buildConfigs.iterator(); iter.hasNext();) {
            IFile buildConfig = (IFile) iter.next();
            BufferedReader br = null;
            try {
                br = new BufferedReader(new InputStreamReader(buildConfig.getContents()));
            } catch (CoreException e) {
                continue;
            }
            StringBuffer sb = new StringBuffer();
            try {
                String line = br.readLine();
                while (line != null) {
                    line = line.replaceAll(name + ".java", name + ".aj"); //$NON-NLS-1$ //$NON-NLS-2$
                    sb.append(line);
                    sb.append(System.getProperty("line.separator")); //$NON-NLS-1$
                    line = br.readLine();
                }
                StringReader reader = new StringReader(sb.toString());
                buildConfig.setContents(new ReaderInputStream(reader), true, true, monitor);
            } catch (IOException ioe) {
            } catch (CoreException e) {
            } finally {
                try {
                    br.close();
                } catch (IOException ioe) {
                }
            }
        }
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction,
     *      org.eclipse.jface.viewers.ISelection)
     */
    public void selectionChanged(IAction action, ISelection selection) {
        this.selection = selection;
    }

}