Package org.springframework.ide.eclipse.beans.ui.refactoring.actions

Source Code of org.springframework.ide.eclipse.beans.ui.refactoring.actions.BeansMoveRefactorAction

/*******************************************************************************
* 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);
        }
      }
    }
  }

}
TOP

Related Classes of org.springframework.ide.eclipse.beans.ui.refactoring.actions.BeansMoveRefactorAction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.