package com.sap.ide.refactoring.op.move;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.ltk.core.refactoring.RefactoringStatus;
import com.sap.ide.refactoring.core.AbstractModelRefactoring;
import com.sap.ide.refactoring.core.AbstractRefactoringCommand;
import com.sap.ide.refactoring.core.textual.RefactoringEditorFacade;
import com.sap.ide.refactoring.model.RefactoringModelUtil;
import com.sap.ide.refactoring.model.move.MovableElement;
import com.sap.ide.refactoring.model.move.MovableElementTarget;
import com.sap.tc.moin.repository.mmi.reflect.RefObject;
public class MoveRefactoring extends AbstractModelRefactoring {
private RefObject elementToMove;
private MovableElement elementToMoveAsMovableElement;
private MovableElementTarget target;
public MoveRefactoring(RefactoringEditorFacade facade) {
super(facade);
}
@Override
public String getName() {
return "Move";
}
// #### Preparation and initial check (before the GUI is shown) ####
public void setElementToMove(RefObject elementToMove) {
this.elementToMove = elementToMove;
}
public MovableElement getElementToMove() {
return this.elementToMoveAsMovableElement;
}
public void setTarget(MovableElementTarget target) {
this.target = target;
}
@Override
public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws OperationCanceledException {
if (elementToMove == null) {
return RefactoringStatus.createFatalErrorStatus("Exactly one element must be selected to be moved.");
}
elementToMoveAsMovableElement = RefactoringModelUtil.adaptObject(elementToMove, MovableElement.class);
if (elementToMoveAsMovableElement == null) {
return RefactoringStatus.createFatalErrorStatus("Selected Element does not support moving");
}
return new RefactoringStatus();
}
@Override
protected AbstractRefactoringCommand createExecutableRefactoringCommand() {
return new MoveCommand(facade, elementToMoveAsMovableElement, target);
}
}