1 /*******************************************************************************
2 * Copyright (c) 2000, 2011 IBM Corporation and others.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
9 * IBM Corporation - initial API and implementation
10 *******************************************************************************/
11 package org.eclipse.jdt.internal.ui.refactoring.reorg;
13 import java.util.List;
15 import org.eclipse.core.resources.IResource;
17 import org.eclipse.jface.viewers.IStructuredSelection;
19 import org.eclipse.jface.text.ITextSelection;
21 import org.eclipse.ui.IWorkbenchSite;
22 import org.eclipse.ui.PlatformUI;
23 import org.eclipse.ui.actions.MoveProjectAction;
25 import org.eclipse.jdt.core.IJavaElement;
26 import org.eclipse.jdt.core.JavaModelException;
28 import org.eclipse.jdt.internal.corext.refactoring.RefactoringAvailabilityTester;
29 import org.eclipse.jdt.internal.corext.refactoring.RefactoringExecutionStarter;
30 import org.eclipse.jdt.internal.corext.refactoring.reorg.ReorgUtils;
31 import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
33 import org.eclipse.jdt.ui.actions.SelectionDispatchAction;
35 import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
36 import org.eclipse.jdt.internal.ui.JavaPlugin;
37 import org.eclipse.jdt.internal.ui.javaeditor.JavaTextSelection;
38 import org.eclipse.jdt.internal.ui.refactoring.RefactoringMessages;
39 import org.eclipse.jdt.internal.ui.util.ExceptionHandler;
41 public class ReorgMoveAction extends SelectionDispatchAction {
42 public ReorgMoveAction(IWorkbenchSite site) {
44 setText(ReorgMessages.ReorgMoveAction_3);
45 setDescription(ReorgMessages.ReorgMoveAction_4);
46 PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.MOVE_ACTION);
50 public void selectionChanged(IStructuredSelection selection) {
51 if (!selection.isEmpty()) {
52 if (ReorgUtils.containsOnlyProjects(selection.toList())) {
53 setEnabled(createWorkbenchAction(selection).isEnabled());
57 List<?> elements= selection.toList();
58 IResource[] resources= ReorgUtils.getResources(elements);
59 IJavaElement[] javaElements= ReorgUtils.getJavaElements(elements);
60 if (elements.size() != resources.length + javaElements.length)
63 setEnabled(RefactoringAvailabilityTester.isMoveAvailable(resources, javaElements));
64 } catch (JavaModelException e) {
65 // no ui here - this happens on selection changes
66 // http://bugs.eclipse.org/bugs/show_bug.cgi?id=19253
67 if (JavaModelUtil.isExceptionToBeLogged(e))
76 public void selectionChanged(ITextSelection selection) {
81 * Note: This method is for internal use only. Clients should not call this method.
83 * @param selection the selection
85 * @noreference This method is not intended to be referenced by clients.
88 public void selectionChanged(JavaTextSelection selection) {
90 setEnabled(RefactoringAvailabilityTester.isMoveAvailable(selection));
91 } catch (JavaModelException e) {
96 private MoveProjectAction createWorkbenchAction(IStructuredSelection selection) {
97 MoveProjectAction action= new MoveProjectAction(getSite());
98 action.selectionChanged(selection);
103 public void run(IStructuredSelection selection) {
104 if (ReorgUtils.containsOnlyProjects(selection.toList())) {
105 createWorkbenchAction(selection).run();
109 List<?> elements= selection.toList();
110 IResource[] resources= ReorgUtils.getResources(elements);
111 IJavaElement[] javaElements= ReorgUtils.getJavaElements(elements);
112 if (RefactoringAvailabilityTester.isMoveAvailable(resources, javaElements))
113 RefactoringExecutionStarter.startMoveRefactoring(resources, javaElements, getShell());
114 } catch (JavaModelException e) {
115 ExceptionHandler.handle(e, RefactoringMessages.OpenRefactoringWizardAction_refactoring, RefactoringMessages.OpenRefactoringWizardAction_exception);