package org.ovirt.engine.ui.uicommonweb.models; import org.ovirt.engine.core.common.businessentities.ErrataCounts; import org.ovirt.engine.core.common.businessentities.HasErrata; import org.ovirt.engine.core.common.queries.GetErrataCountsParameters; import org.ovirt.engine.core.common.queries.VdcQueryReturnValue; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.ui.frontend.Frontend; import org.ovirt.engine.ui.uicommonweb.UICommand; import org.ovirt.engine.ui.uicompat.ConstantsManager; import org.ovirt.engine.ui.uicompat.EventArgs; import org.ovirt.engine.ui.uicompat.IEventListener; import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs; import org.ovirt.engine.ui.uicompat.UIConstants; /** * Model object representing counts (summary info) about errata for a VM or a Host. * * @see {@link Erratum} * @see {@link ErrataCounts} * @see {@link HostErrataCountModel} * @see {@link VmErrataCountModel} */ public abstract class AbstractErrataCountModel extends EntityModel<HasErrata> { private static final UIConstants constants = ConstantsManager.getInstance().getConstants(); public static final String SHOW_SECURITY_COMMAND = "ShowSecurityErrata"; //$NON-NLS-1$ public static final String SHOW_BUGS_COMMAND = "ShowBugsErrata"; //$NON-NLS-1$ public static final String SHOW_ENHANCEMENTS_COMMAND = "ShowEnhancementsErrata"; //$NON-NLS-1$ protected static final String CLOSE = "Close"; //$NON-NLS-1$ // commands that can be performed on this Model private UICommand showSecurityCommand; private UICommand showBugsCommand; private UICommand showEnhancementsCommand; private EntityModel<ErrataCounts> errataCounts; private Guid guid; private String filterCommand; public AbstractErrataCountModel() { showSecurityCommand = new UICommand(SHOW_SECURITY_COMMAND, this); showBugsCommand = new UICommand(SHOW_BUGS_COMMAND, this); showEnhancementsCommand = new UICommand(SHOW_ENHANCEMENTS_COMMAND, this); errataCounts = new EntityModel<>(); } @Override public void executeCommand(UICommand command) { if (CLOSE.equals(command.getName())) { cancel(); } else if (SHOW_SECURITY_COMMAND.equals(command.getName()) || SHOW_BUGS_COMMAND.equals(command.getName()) || SHOW_ENHANCEMENTS_COMMAND.equals(command.getName())) { showErrataListWithDetailsPopup(command.getName()); } else { super.executeCommand(command); } } private void cancel() { setWindow(null); } public UICommand getShowSecurityCommand() { return showSecurityCommand; } public UICommand getShowBugsCommand() { return showBugsCommand; } public UICommand getShowEnhancementsCommand() { return showEnhancementsCommand; } public void setErrataCounts(ErrataCounts errataCounts) { this.errataCounts.setEntity(errataCounts); // ^ publishes an EntityChange event, bus notifies the Presenter } public ErrataCounts getErrataCounts() { return this.errataCounts.getEntity(); } public void addErrataCountsChangeListener(IEventListener<? super EventArgs> listener) { this.errataCounts.getEntityChangedEvent().addListener(listener); } public void addPropertyChangeListener(IEventListener<PropertyChangedEventArgs> listener) { getPropertyChangedEvent().addListener(listener); } public void runQuery(Guid guid) { startProgress("getCount"); //$NON-NLS-1$ AsyncQuery<VdcQueryReturnValue> asyncQuery = new AsyncQuery<>(returnValue -> { stopProgress(); ErrataCounts resultEntity = returnValue.getReturnValue(); //Set message to null to make sure the actual setMessage creates an event. setMessage(null); if (resultEntity != null && returnValue.getSucceeded()) { setErrataCounts(resultEntity); } else { setMessage( constants.katelloProblemRetrievingErrata() + " " + returnValue.getExceptionMessage()); //$NON-NLS-1$ } }); asyncQuery.setHandleFailure(true); Frontend.getInstance().runQuery(getQueryType(), new GetErrataCountsParameters(guid), asyncQuery); } public void setGuid(Guid id) { this.guid = id; } public Guid getGuid() { return guid; } protected void initCommands(Model m) { UICommand closeCommand = UICommand.createDefaultOkUiCommand(CLOSE, this); closeCommand.setIsCancel(true); m.getCommands().add(closeCommand); } @Override public String getHashName() { return "errata"; //$NON-NLS-1$ } public String getFilterCommand() { return filterCommand; } public void setFilterCommand(String filterCommand) { this.filterCommand = filterCommand; } protected abstract VdcQueryType getQueryType(); protected abstract void showErrataListWithDetailsPopup(String filterCommand); protected void showErrataListWithDetailsPopup(String filterCommand, String title) { if (getWindow() != null) { return; } HostErrataCountModel transferObj = new HostErrataCountModel(); transferObj.setFilterCommand(filterCommand); transferObj.setTitle(title); transferObj.setGuid(getGuid()); setWindow(transferObj); initCommands(transferObj); } }