package org.ovirt.engine.ui.uicommonweb.models.userportal; import java.util.HashMap; import java.util.Map; import org.ovirt.engine.core.common.action.AttachUserToVmFromPoolAndRunParameters; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VMStatus; import org.ovirt.engine.core.common.businessentities.VmPool; import org.ovirt.engine.core.common.queries.IdQueryParameters; 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.AsyncQuery; import org.ovirt.engine.ui.frontend.Frontend; import org.ovirt.engine.ui.uicommonweb.UICommand; import org.ovirt.engine.ui.uicompat.Event; import org.ovirt.engine.ui.uicompat.EventArgs; import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs; @SuppressWarnings("unused") public class PoolItemBehavior extends ItemBehavior { // this has to be static because in every request a new instance of this class is created private static Map<Guid, Integer> poolToOsType = new HashMap<>(); private VM poolRepresentant; /** * @see UserPortalItemModel#UserPortalItemModel(Object, VmConsoles, VM) */ public PoolItemBehavior(UserPortalItemModel item, VM poolRepresentant) { super(item); this.poolRepresentant = poolRepresentant; } @Override public void onEntityChanged() { updateProperties(); updateActionAvailability(); } @Override public void entityPropertyChanged(PropertyChangedEventArgs e) { } @Override public void executeCommand(UICommand command) { if (command == getItem().getTakeVmCommand()) { takeVm(); } } @Override public void eventRaised(Event ev, Object sender, EventArgs args) { // Do nothing. There are no events to handle for pools. } private void takeVm() { VmPool entity = (VmPool) getItem().getEntity(); AttachUserToVmFromPoolAndRunParameters params = new AttachUserToVmFromPoolAndRunParameters( entity.getVmPoolId(), Frontend.getInstance().getLoggedInUser().getId()); Frontend.getInstance().runAction(VdcActionType.AttachUserToVmFromPoolAndRun, params, result -> { if (!result.getReturnValue().getSucceeded()) { return; } }, this); } private void updateProperties() { VmPool entity = (VmPool) getItem().getEntity(); getItem().setName(entity.getName()); getItem().setDescription(entity.getVmPoolDescription()); getItem().setIsPool(true); getItem().setIsServer(false); getItem().setStatus(VMStatus.Down); getItem().setIsFromPool(false); getItem().setPoolType(entity.getVmPoolType()); if (poolToOsType.containsKey(entity.getVmPoolId())) { getItem().setOsId(poolToOsType.get(entity.getVmPoolId())); } if (poolRepresentant != null) { updatePropertiesFromPoolRepresentant(poolRepresentant); poolRepresentant = null; } else { Frontend.getInstance().runQuery(VdcQueryType.GetVmDataByPoolId, new IdQueryParameters(entity.getVmPoolId()), new AsyncQuery<VdcQueryReturnValue>(returnValue -> { if (returnValue != null) { VM vm = returnValue.getReturnValue(); if (vm == null) { return; } updatePropertiesFromPoolRepresentant(vm); } })); } } private void updatePropertiesFromPoolRepresentant(VM poolRepresentant) { UserPortalItemModel model = getItem(); model.setOsId(poolRepresentant.getVmOsId()); model.setSmallIconId(poolRepresentant.getStaticData().getSmallIconId()); model.setLargeIconId(poolRepresentant.getStaticData().getLargeIconId()); poolToOsType.put(((VmPool) model.getEntity()).getVmPoolId(), poolRepresentant.getVmOsId()); } private void updateActionAvailability() { getItem().getTakeVmCommand().setIsAvailable(true); getItem().getRunCommand().setIsAvailable(false); getItem().getPauseCommand().setIsAvailable(true); getItem().getShutdownCommand().setIsAvailable(true); getItem().getStopCommand().setIsAvailable(true); getItem().getReturnVmCommand().setIsAvailable(false); getItem().getPauseCommand().setIsExecutionAllowed(false); getItem().getShutdownCommand().setIsExecutionAllowed(false); getItem().getStopCommand().setIsExecutionAllowed(false); getItem().getRebootCommand().setIsExecutionAllowed(false); } }