package xapi.ui.autoui; import xapi.inject.X_Inject; import xapi.ui.autoui.api.UserInterface; import xapi.ui.autoui.api.UserInterfaceFactory; public class X_AutoUi { private X_AutoUi(){} @SuppressWarnings({ "unchecked", "rawtypes" }) public static <T, U extends UserInterface<T>> U makeUi(T model, Class<? extends T> uiOptions, Class<? super U> uiType) { if (uiOptions == null) { assert model != null : "You must provide either a model object, or a model class"; uiOptions = (Class<? extends T>) model.getClass(); } U ui = (U) instantiate((Class)uiOptions, (Class)uiType); try { return ui; } finally { if (model != null) { ui.renderUi(model); } } } @SuppressWarnings({ "unchecked", "rawtypes" }) private static <T, U extends UserInterface<T>> U instantiate(Class<? extends T> cls, Class<? super U> uiType) { return (U) X_Inject .instance(UserInterfaceFactory.class) .createUi((Class)cls, (Class)uiType); } }