package org.ovirt.engine.ui.uicommonweb.models.hosts;
import java.util.Collections;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.action.VdcReturnValueBase;
import org.ovirt.engine.core.common.action.hostdeploy.UpgradeHostParameters;
import org.ovirt.engine.core.common.businessentities.VDS;
import org.ovirt.engine.core.common.utils.RpmVersionUtils;
import org.ovirt.engine.ui.frontend.Frontend;
import org.ovirt.engine.ui.uicommonweb.Linq;
import org.ovirt.engine.ui.uicommonweb.UICommand;
import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
import org.ovirt.engine.ui.uicommonweb.help.HelpTag;
import org.ovirt.engine.ui.uicompat.ConstantsManager;
import org.ovirt.engine.ui.uicompat.UIConstants;
public class UpgradeModel extends InstallModel {
private static final String ON_UPGRADE = "OnUpgrade"; //$NON-NLS-1$
private static final UIConstants constants = ConstantsManager.getInstance().getConstants();
public UpgradeModel(final VDS host) {
setVds(host);
}
@Override
public void initialize() {
setTitle(constants.upgradeHostTitle());
setHelpTag(HelpTag.upgrade_host);
setHashName(HelpTag.upgrade_host.name);
getOVirtISO().setIsAvailable(false);
getOverrideIpTables().setIsAvailable(false);
getActivateHostAfterInstall().setEntity(true);
getHostVersion().setEntity(getVds().getHostOs());
getHostVersion().setIsAvailable(false);
AsyncDataProvider.getInstance().getoVirtISOsList(new AsyncQuery<>(isos -> {
Collections.sort(isos,
(rpmV1, rpmV2) -> RpmVersionUtils.compareRpmParts(rpmV2.getRpmName(), rpmV1.getRpmName()));
getOVirtISO().setItems(isos);
getOVirtISO().setSelectedItem(Linq.firstOrNull(isos));
getOVirtISO().setIsAvailable(true);
getOVirtISO().setIsChangeable(!isos.isEmpty());
getHostVersion().setIsAvailable(true);
if (isos.isEmpty()) {
setMessage(constants.thereAreNoISOversionsVompatibleWithHostCurrentVerMsg());
}
if (getVds().getHostOs() == null) {
setMessage(constants.hostMustBeInstalledBeforeUpgrade());
}
addUpgradeCommands(getVds(), isos.isEmpty());
}),
getVds().getId());
}
private void addUpgradeCommands(VDS host, boolean isOnlyClose) {
if (!isOnlyClose) {
UICommand command = UICommand.createDefaultOkUiCommand(ON_UPGRADE, this);
getCommands().add(0, command);
}
getUserName().setEntity(host.getSshUsername());
getCancelCommand().setTitle(isOnlyClose ? constants.close() : constants.cancel());
}
@Override
public void executeCommand(UICommand command) {
super.executeCommand(command);
if (ON_UPGRADE.equals(command.getName())) {
onUpgrade();
}
}
private void onUpgrade() {
if (!validate(true)) {
return;
}
UpgradeHostParameters params = new UpgradeHostParameters(getVds().getId());
params.setoVirtIsoFile(getOVirtISO().getSelectedItem().getRpmName());
invokeHostUpgrade(params);
}
private void invokeHostUpgrade(UpgradeHostParameters params) {
Frontend.getInstance().runAction(VdcActionType.UpgradeHost, params, result -> {
VdcReturnValueBase returnValue = result.getReturnValue();
if (returnValue != null && returnValue.getSucceeded()) {
getCancelCommand().execute();
}
});
}
}