package org.ovirt.engine.ui.webadmin.uicommon.model; import org.ovirt.engine.ui.uicommonweb.models.CommonModel; import org.ovirt.engine.ui.uicommonweb.models.EntityModel; import org.ovirt.engine.ui.uicommonweb.models.ListWithDetailsModel; import org.ovirt.engine.ui.uicommonweb.models.SearchableListModel; /** * Used to resolve UiCommon main and detail models from the root {@link CommonModel} instance. */ public abstract class UiCommonModelResolver { /** * Resolves a main model instance. * * @param <M> * Main model type. */ @SuppressWarnings("unchecked") public static <M extends SearchableListModel> M getMainListModel( CommonModel commonModel, Class<M> mainModelClass) { assert (commonModel != null) : "CommonModel must not be null"; for (SearchableListModel list : commonModel.getItems()) { if (list != null && list.getClass().equals(mainModelClass)) { return (M) list; } } throw new IllegalStateException("Cannot resolve main list model [" + mainModelClass + "]"); } /** * Resolves a detail model instance according to the given main model class. * * @param <M> * Main model type. * @param <D> * Detail model type. */ @SuppressWarnings("unchecked") public static <M extends ListWithDetailsModel, D extends EntityModel> D getDetailListModel( CommonModel commonModel, Class<M> mainModelClass, Class<D> detailModelClass) { assert (commonModel != null) : "CommonModel must not be null"; M mainListModel = getMainListModel(commonModel, mainModelClass); for (EntityModel details : mainListModel.getDetailModels()) { if (details != null && details.getClass().equals(detailModelClass)) { return (D) details; } } throw new IllegalStateException("Cannot resolve detail list model [" + detailModelClass + "] from main list model [" + mainModelClass + "]"); } }