package org.ovirt.engine.ui.webadmin.section.main.presenter.popup; import org.ovirt.engine.core.common.businessentities.Erratum; import org.ovirt.engine.ui.common.presenter.AbstractModelBoundPopupPresenterWidget; import org.ovirt.engine.ui.common.uicommon.model.SearchableDetailModelProvider; import org.ovirt.engine.ui.uicommonweb.models.AbstractErrataCountModel; import org.ovirt.engine.ui.uicommonweb.models.AbstractErrataListModel; import org.ovirt.engine.ui.uicommonweb.models.ErrataFilterValue; import org.ovirt.engine.ui.uicommonweb.models.SearchableListModel; import org.ovirt.engine.ui.uicompat.IEventListener; import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs; import org.ovirt.engine.ui.webadmin.section.main.view.popup.ErrataTableView; import com.google.gwt.event.shared.EventBus; import com.google.inject.Inject; /** * Pop-up widget that renders Errata (singular: Erratum). The pop-up is basically a split panel, with * a grid of Erratum in the top pane, and the selected Erratum's detail in the bottom pane. */ public abstract class ErrataListWithDetailsPopupPresenterWidget<T extends SearchableDetailModelProvider<Erratum, ? extends SearchableListModel, ? extends AbstractErrataListModel>> extends AbstractModelBoundPopupPresenterWidget<AbstractErrataCountModel, ErrataListWithDetailsPopupPresenterWidget.ViewDef> { public interface ViewDef extends AbstractModelBoundPopupPresenterWidget.ViewDef<AbstractErrataCountModel> { public void setErrataDetailPanelVisibilty(boolean visible); public void updateErrataDetailFormPanel(Erratum erratum); public ErrataTableView getErrataTable(); public Erratum getSelectedErratum(); public void showErrataList(); } private final T modelProvider; private IEventListener<PropertyChangedEventArgs> changeListener; @Inject public ErrataListWithDetailsPopupPresenterWidget(EventBus eventBus, ViewDef view, T modelProvider) { super(eventBus, view); this.modelProvider = modelProvider; } @Override public void init(final AbstractErrataCountModel clickSource) { super.init(clickSource); AbstractErrataListModel model = modelProvider.getModel(); model.setItemsFilter(createFilter(clickSource.getFilterCommand())); } private ErrataFilterValue createFilter(String filterCommand) { ErrataFilterValue filterValue = new ErrataFilterValue(false, false, false); if (AbstractErrataCountModel.SHOW_BUGS_COMMAND.equals(filterCommand)) { filterValue.setBugs(true); } else if (AbstractErrataCountModel.SHOW_ENHANCEMENTS_COMMAND.equals(filterCommand)) { filterValue.setEnhancements(true); } else if (AbstractErrataCountModel.SHOW_SECURITY_COMMAND.equals(filterCommand)) { filterValue.setSecurity(true); } return filterValue; } @Override protected void onBind() { super.onBind(); // // Handle the query returning a new list of errata -> simple view update. // changeListener = (ev, sender, args) -> getView().showErrataList(); modelProvider.getModel().addItemsChangeListener(changeListener); // Handle the errata selection changing -> simple view update. // getView().getErrataTable().addSelectionChangeHandler(event -> { Erratum erratum = getView().getSelectedErratum(); if (erratum == null) { getView().setErrataDetailPanelVisibilty(false); } else { getView().updateErrataDetailFormPanel(erratum); getView().setErrataDetailPanelVisibilty(true); } }); } @Override public void onUnbind() { super.onUnbind(); if ( changeListener != null) { modelProvider.getModel().getPropertyChangedEvent().removeListener(changeListener); } } }