package gov.nasa.jpl.mbee.mdk.api.docgen; import com.nomagic.magicdraw.core.Project; import com.nomagic.magicdraw.uml.BaseElement; import com.nomagic.uml2.ext.magicdraw.classes.mdkernel.Element; import gov.nasa.jpl.mbee.mdk.api.incubating.convert.Converters; import java.util.function.Function; /** * Created by igomes on 8/23/16. */ public abstract class ElementReference<E extends Element> implements Function<Project, E> { public abstract Class<E> getElementClass(); public abstract String getID(); public abstract String getQualifiedName(); @Override public E apply(Project project) { BaseElement element = Converters.getIdToElementConverter() .apply(getID(), project); E e = convertInstanceOfObject(element, getElementClass()); if (e != null) { return e; } element = Converters.getIdToElementConverter() .apply(getID(), project); e = convertInstanceOfObject(element, getElementClass()); return e; } private static <T> T convertInstanceOfObject(Object o, Class<T> clazz) { try { return clazz.cast(o); } catch (ClassCastException e) { return null; } } }