package org.ovirt.engine.ui.uicommonweb.models.vms; import java.util.ArrayList; import java.util.List; import org.ovirt.engine.core.common.action.RunVmOnceParams; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VDSStatus; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.ui.frontend.Frontend; import org.ovirt.engine.ui.uicommonweb.ICommandTarget; import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider; public class WebadminRunOnceModel extends RunOnceModel { public WebadminRunOnceModel(VM vm, ICommandTarget commandTarget) { super(vm, commandTarget); } @Override public void init() { super.init(); getIsAutoAssign().setEntity(true); // Custom Properties getCustomPropertySheet().setKeyValueMap( AsyncDataProvider.getInstance().getCustomPropertiesList().get(vm.getCompatibilityVersion())); getCustomPropertySheet().deserialize(vm.getCustomProperties()); loadHosts(); } /** * Load active hosts bound to active cluster. */ private void loadHosts() { // append just active hosts AsyncDataProvider.getInstance().getHostListByCluster(new AsyncQuery<>( hosts -> { final List<VDS> activeHosts = new ArrayList<>(); for (VDS host : hosts) { if (VDSStatus.Up.equals(host.getStatus())) { activeHosts.add(host); } } getDefaultHost().setItems(activeHosts); // hide host tab when no active host is available if (activeHosts.isEmpty()) { setIsHostTabVisible(false); } }), vm.getClusterName()); } @Override protected RunVmOnceParams createRunVmOnceParams() { RunVmOnceParams params = super.createRunVmOnceParams(); if (getIsAutoAssign().getEntity()) { params.setDestinationVdsId(null); } else { // set destination host if specified VDS defaultHost = getDefaultHost().getSelectedItem(); params.setDestinationVdsId(defaultHost != null ? defaultHost.getId() : null); } return params; } @Override protected void onRunOnce() { Frontend.getInstance().runAction(VdcActionType.RunVmOnce, createRunVmOnceParams(), null, this); commandTarget.executeCommand(runOnceCommand); } }