/******************************************************************************* * Copyright (c) 2007, 2008 Spring IDE Developers * 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: * Spring IDE Developers - initial API and implementation *******************************************************************************/ package org.springframework.ide.eclipse.beans.ui.refactoring.actions; import java.lang.reflect.Constructor; import java.util.ArrayList; import java.util.List; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.IType; import org.eclipse.jdt.internal.corext.refactoring.RefactoringAvailabilityTester; import org.eclipse.jdt.internal.corext.refactoring.reorg.JavaMoveProcessor; import org.eclipse.jdt.internal.corext.refactoring.reorg.ReorgPolicyFactory; import org.eclipse.jdt.internal.corext.refactoring.reorg.ReorgUtils; import org.eclipse.jdt.internal.corext.refactoring.reorg.IReorgPolicy.IMovePolicy; import org.eclipse.jdt.internal.ui.refactoring.RefactoringMessages; import org.eclipse.jdt.internal.ui.refactoring.reorg.CreateTargetQueries; import org.eclipse.jdt.internal.ui.refactoring.reorg.ReorgMoveWizard; import org.eclipse.jdt.internal.ui.refactoring.reorg.ReorgQueries; import org.eclipse.ltk.core.refactoring.Refactoring; import org.eclipse.ltk.core.refactoring.participants.MoveRefactoring; import org.eclipse.ltk.ui.refactoring.RefactoringWizard; import org.eclipse.swt.widgets.Shell; import org.springframework.ide.eclipse.beans.ui.BeansUIPlugin; import org.springframework.ide.eclipse.core.SpringCoreUtils; import org.springframework.util.ClassUtils; /** * Starts move refactoring actions for Java Elements like class * @author Christian Dupuis * @author Torsten Juergeleit * @since 2.0 */ @SuppressWarnings("restriction") public class BeansMoveRefactorAction extends AbstractBeansRefactorAction { @Override protected void run(IJavaElement element) throws CoreException { if (!(element instanceof IType)) { return; } List<IJavaElement> elements = new ArrayList<IJavaElement>(); elements.add(element); IResource[] resources = ReorgUtils.getResources(elements); IJavaElement[] javaElements = ReorgUtils.getJavaElements(elements); startRefactoring(resources, javaElements, BeansUIPlugin.getActiveWorkbenchShell()); } protected void startRefactoring(IResource[] resources, IJavaElement[] javaElements, Shell shell) throws CoreException { if (RefactoringAvailabilityTester.isMoveAvailable(resources, javaElements)) { IMovePolicy policy = ReorgPolicyFactory.createMovePolicy(resources, javaElements); if (policy.canEnable()) { JavaMoveProcessor processor = new JavaMoveProcessor(policy); Refactoring refactoring = new MoveRefactoring(processor); RefactoringWizard wizard = null; // Hack to allow usage of this refactoring on Eclipse < 3.4 and 3.4 if (SpringCoreUtils.isEclipseSameOrNewer(3, 4)) { // RefactoringWizard wizard = new ReorgMoveWizard(processor,refactoring); Constructor cons = ClassUtils.getConstructorIfAvailable(ReorgMoveWizard.class, new Class[] { JavaMoveProcessor.class, Refactoring.class }); if (cons != null) { try { wizard = (RefactoringWizard) cons.newInstance(processor, refactoring); } catch (Exception e) { BeansUIPlugin.log(e); } } } else { // RefactoringWizard wizard = new ReorgMoveWizard(refactoring); Constructor cons = ClassUtils.getConstructorIfAvailable(ReorgMoveWizard.class, new Class[] { Refactoring.class }); if (cons != null) { try { wizard = (RefactoringWizard) cons.newInstance(refactoring); } catch (Exception e) { BeansUIPlugin.log(e); } } } if (wizard != null) { processor.setCreateTargetQueries(new CreateTargetQueries(wizard)); processor.setReorgQueries(new ReorgQueries(wizard)); new RefactoringStarter().activate(refactoring, wizard, shell, RefactoringMessages.OpenRefactoringWizardAction_refactoring, RefactoringSaveHelper.SAVE_ALL_ALWAYS_ASK); } } } } }