package com.sap.ide.refactoring.model; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.Platform; import com.sap.ide.refactoring.model.rename.NamedElement; import com.sap.tc.moin.repository.mmi.model.MofClass; import com.sap.tc.moin.repository.mmi.reflect.RefObject; public class RefactoringModelUtil { @SuppressWarnings("unchecked") public static <T> T adaptObject(Object object, Class<T> targetType) { //FIXME: Change the implementation back to use {@link ModelAdapterUI} once we have found // a solution to properly enforce loading of the bundles we need. if (object == null) { return null; } else if (targetType.isInstance(object)) { return (T) object; // runtime-checked cast } Object adapter; if (object instanceof IAdaptable) { adapter = ((IAdaptable) object).getAdapter(targetType); } else { // forces bundle load adapter = Platform.getAdapterManager().loadAdapter(object, targetType.getCanonicalName()); } return adaptObject(adapter, targetType); } public static String getModelElementName(RefObject modelElement) { if (modelElement == null) { return "null"; } if (!modelElement.is___Alive()) { return "<deleted>"; } try { NamedElement element = RefactoringModelUtil.adaptObject(modelElement, NamedElement.class); if (element == null) { return (String) modelElement.refGetValue("name"); } else { return element.getName(); } } catch (Exception e) { // has no human readable name; atleast none we know return modelElement.get___Mri().toString(); } } public static String getModelElementType(RefObject modelElement) { if (modelElement == null) { return "null"; } if (!modelElement.is___Alive()) { return "<deleted>"; } return ((MofClass) modelElement.refMetaObject()).getName(); } public static String getModelElementNameAndType(RefObject modelelement) { return getModelElementName(modelelement) + " (" + RefactoringModelUtil.getModelElementType(modelelement)+ ")"; } }