package org.ovirt.engine.core.bll; import org.ovirt.engine.core.common.action.SetVmTicketParameters; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VMStatus; import org.ovirt.engine.core.common.vdscommands.SetVmTicketVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.VDSCommandType; import org.ovirt.engine.core.dal.VdcBllMessages; import org.ovirt.engine.core.dal.dbbroker.DbFacade; import org.ovirt.engine.core.compat.StringHelper; import org.ovirt.engine.core.utils.Ticketing; import org.ovirt.engine.core.common.vdscommands.*; @InternalCommandAttribute public class SetVmTicketCommand<T extends SetVmTicketParameters> extends VmOperationCommandBase<T> { private String mTicket; private final int mValidTime; public SetVmTicketCommand(T parameters) { super(parameters); mTicket = parameters.getTicket(); mValidTime = parameters.getValidTime(); } @Override protected boolean canDoAction() { boolean returnValue = true; VM vm = DbFacade.getInstance().getVmDAO().getById(getVmId()); if (vm == null) { returnValue = false; addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_VM_NOT_FOUND); } else if (getVm().getstatus() != VMStatus.Up && getVm().getstatus() != VMStatus.Paused && getVm().getstatus() != VMStatus.PoweringUp && getVm().getstatus() != VMStatus.PoweringDown && getVm().getstatus() != VMStatus.RebootInProgress) { returnValue = false; addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_VM_STATUS_ILLEGAL); } if (!returnValue) { addCanDoActionMessage(VdcBllMessages.VAR__ACTION__SET); addCanDoActionMessage(VdcBllMessages.VAR__TYPE__VM_TICKET); } return returnValue; } @Override protected void Perform() { if (StringHelper.isNullOrEmpty(mTicket)) { // The ticket was not transfered by client we should generate it mTicket = Ticketing.GenerateOTP(); } setSucceeded(Backend .getInstance() .getResourceManager() .RunVdsCommand(VDSCommandType.SetVmTicket, new SetVmTicketVDSCommandParameters(getVdsId(), getVmId(), mTicket, mValidTime)).getSucceeded()); if (getSucceeded()) { setActionReturnValue(mTicket); VM vm = DbFacade.getInstance().getVmDAO().getById(getVmId()); vm.setguest_cur_user_name(getCurrentUser().getUserName()); DbFacade.getInstance().getVmDynamicDAO().update(vm.getDynamicData()); } } }