package com.sap.ap.cts.refactoring.adaptation;
import org.eclipse.core.runtime.IAdapterFactory;
import com.sap.ap.cts.refactoring.model.AssociationEndMovableElementAdapter;
import com.sap.ap.cts.refactoring.model.MovableElementAdapter;
import com.sap.ap.cts.refactoring.model.NamedElementAdapter;
import com.sap.ide.refactoring.model.move.MovableElement;
import com.sap.ide.refactoring.model.rename.NamedElement;
import data.classes.AssociationEnd;
/**
* Adapter factory used to adapt runlet classes to the refactoring model
* ({@link com.sap.ide.refactoring.model.RefactoringModelElement}.
*
* This allows to re-use the existing, generic refactorings for runlet.
*
* @author Stephan Erb (d049157)
*
*/
@SuppressWarnings("rawtypes")
public class RefactoringModelAdapterFactory implements IAdapterFactory {
public RefactoringModelAdapterFactory() {
}
@SuppressWarnings("unchecked")
@Override
public Object getAdapter(Object adaptableObject, Class adapterType) {
Object result;
result = handleMove(adaptableObject, adapterType);
if (result != null) {
return result;
}
result = handleRename(adaptableObject, adapterType);
if (result != null) {
return result;
}
return null;
}
private Object handleRename(Object adaptableObject, Class adapterType) {
if (adapterType.equals(NamedElement.class) && adaptableObject instanceof modelmanagement.NamedElement) {
return new NamedElementAdapter((modelmanagement.NamedElement) adaptableObject);
}
return null;
}
private Object handleMove(Object adaptableObject, Class adapterType) {
// special handling for associationEnds
if (adapterType.equals(MovableElement.class) && adaptableObject instanceof AssociationEnd) {
return new AssociationEndMovableElementAdapter((AssociationEnd) adaptableObject);
}
// handle everything that has a composite parent
if (adapterType.equals(MovableElement.class) && adaptableObject instanceof RefObject &&
((RefObject) adaptableObject).refImmediateComposite() != null) {
return new MovableElementAdapter((RefObject) adaptableObject);
}
return null;
}
@Override
public Class[] getAdapterList() {
return new Class[] { MovableElement.class, NamedElement.class };
}
}