package org.ovirt.engine.ui.webadmin.section.main.view.popup;
import org.ovirt.engine.core.common.businessentities.Erratum;
import org.ovirt.engine.core.common.businessentities.HasErrata;
import org.ovirt.engine.ui.common.view.popup.AbstractModelBoundPopupView;
import org.ovirt.engine.ui.common.widget.dialog.SimpleDialogPanel;
import org.ovirt.engine.ui.uicommonweb.models.AbstractErrataCountModel;
import org.ovirt.engine.ui.uicommonweb.models.AbstractErrataListModel;
import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.ErrataListWithDetailsPopupPresenterWidget;
import org.ovirt.engine.ui.webadmin.widget.errata.ErrataDetailModelForm;
import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.cellview.client.LoadingStateChangeEvent.LoadingState;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.SplitLayoutPanel;
/**
* View for the popup widget that renders errata (singular: Erratum). The popup 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 ErrataListWithDetailsPopupView extends AbstractModelBoundPopupView<AbstractErrataCountModel>
implements ErrataListWithDetailsPopupPresenterWidget.ViewDef {
interface ViewUiBinder extends UiBinder<SimpleDialogPanel, ErrataListWithDetailsPopupView> {
ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class);
}
@UiField
SplitLayoutPanel splitLayoutPanel;
@UiField
FlowPanel errataDetailPanel;
@UiField
HTMLPanel errataTitle;
@UiField (provided = true)
@Ignore
ErrataDetailModelForm errataDetailModelForm;
@UiField
ErrataTableView errataTableView;
protected final AbstractErrataListModel model;
public ErrataListWithDetailsPopupView(EventBus eventBus, AbstractErrataListModel model) {
super(eventBus);
errataDetailModelForm = new ErrataDetailModelForm();
model.setItemsFilter(null);
this.model = model;
initWidget(ViewUiBinder.uiBinder.createAndBindUi(this));
errataDetailModelForm.initialize();
}
@Override
public void edit(AbstractErrataCountModel transferObj) {
errataTableView.getErrataTable().setLoadingState(LoadingState.LOADING);
model.setGuid(transferObj.getGuid());
errataTableView.init(model);
HasErrata entity = transferObj.getEntity();
model.setEntity(entity);
model.search();
setErrataDetailPanelVisibilty(false);
}
public void showErrataList() {
errataTableView.edit();
}
public ErrataTableView getErrataTable() {
return errataTableView;
}
public void setErrataDetailPanelVisibilty(boolean visible) {
splitLayoutPanel.setWidgetHidden(errataDetailPanel, !visible);
Scheduler.get().scheduleDeferred(() -> errataTableView.onResize());
}
public void updateErrataDetailFormPanel(Erratum erratum) {
errataTitle.clear();
errataTitle.add(new HTML(erratum.getTitle()));
EntityModel<Erratum> entityModel = new EntityModel<>();
entityModel.setEntity(erratum);
errataDetailModelForm.setModel(entityModel);
errataDetailModelForm.update();
}
@Override
public Erratum getSelectedErratum() {
return errataTableView.getSelectedErratum();
}
@Override
public AbstractErrataCountModel flush() {
return null;
}
@Override
public void cleanup() {
// TODO clean up stuff if needed
}
@Override
public void hide() {
super.hide();
errataTableView.clearHandlers();
}
}