package org.ovirt.engine.core.common.businessentities; import java.io.Serializable; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.Objects; import org.ovirt.engine.core.common.action.VdcActionParametersBase; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.action.VdcReturnValueBase; import org.ovirt.engine.core.common.utils.PersistedCommandContext; import org.ovirt.engine.core.compat.CommandStatus; import org.ovirt.engine.core.compat.Guid; public class CommandEntity implements BusinessEntity<Guid> { private static final long serialVersionUID = 5293055556971973650L; private long engineSessionSeqId; private Guid userId; private Guid commandId; private Guid parentCommandId; private Guid rootCommandId; private PersistedCommandContext commandContext; private VdcActionType commandType; private VdcActionParametersBase commandParameters; private VdcReturnValueBase returnValue; private Date createdAt; private CommandStatus commandStatus; private boolean callbackEnabled; private boolean callbackNotified; private boolean executed; private boolean waitingForEvent; private Map<String, Serializable> data; public CommandEntity() { commandStatus = CommandStatus.UNKNOWN; createdAt = new Date(); data = new HashMap<>(); commandContext = new PersistedCommandContext(); } @Override public int hashCode() { return Objects.hash( commandId, commandType, parentCommandId, rootCommandId, data ); } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (!(obj instanceof CommandEntity)) { return false; } CommandEntity other = (CommandEntity) obj; return Objects.equals(commandId, other.commandId) && commandType == other.commandType && Objects.equals(getGuid(parentCommandId), getGuid(other.parentCommandId)) && Objects.equals(getGuid(rootCommandId), getGuid(other.rootCommandId)) && Objects.equals(data, other.data); } private Guid getGuid(Guid guid) { return Guid.isNullOrEmpty(guid) ? Guid.Empty : guid; } public Date getCreatedAt() { return createdAt; } public void setCreatedAt(Date createdAt) { this.createdAt = createdAt; } public VdcActionParametersBase getCommandParameters() { return this.commandParameters; } public void setCommandParameters(VdcActionParametersBase value) { this.commandParameters = value; } public Guid getId() { return commandId; } public void setId(Guid commandId) { this.commandId = commandId; } public Guid getParentCommandId() { return parentCommandId; } public void setParentCommandId(Guid parentCommandId) { this.parentCommandId = parentCommandId; } public Guid getRootCommandId() { return rootCommandId; } public void setRootCommandId(Guid rootCommandId) { this.rootCommandId = rootCommandId; } public VdcActionType getCommandType() { return commandType; } public void setCommandType(VdcActionType type) { this.commandType = type; } public CommandStatus getCommandStatus() { return commandStatus; } public void setCommandStatus(CommandStatus commandStatus) { this.commandStatus = commandStatus; } public boolean isCallbackEnabled() { return callbackEnabled; } public void setCallbackEnabled(boolean callbackEnabled) { this.callbackEnabled = callbackEnabled; } public boolean isCallbackNotified() { return callbackNotified; } public void setCallbackNotified(boolean callbackNotified) { this.callbackNotified = callbackNotified; } public void setData(Map<String, Serializable> data) { this.data = data; } public Map<String, Serializable> getData() { return data; } public static CommandEntity buildCommandEntity(Guid userId, long engineSessionSeqId, Guid commandId, Guid parentCommandId, Guid rootCommandId, PersistedCommandContext commandContext, VdcActionType actionType, VdcActionParametersBase params, CommandStatus status, boolean callbackEnabled, VdcReturnValueBase returnValue, Map<String, Serializable> data) { CommandEntity entity = new CommandEntity(); entity.setEngineSessionSeqId(engineSessionSeqId); entity.setUserId(userId); entity.setId(commandId); entity.setParentCommandId(parentCommandId); entity.setRootCommandId(rootCommandId); if (commandContext != null) { entity.setCommandContext(commandContext); } entity.setCommandType(actionType); entity.setCommandParameters(params); entity.setCommandStatus(status); entity.setCallbackEnabled(callbackEnabled); entity.setReturnValue(returnValue); entity.setData(data); return entity; } public VdcReturnValueBase getReturnValue() { return returnValue; } public void setReturnValue(VdcReturnValueBase returnValue) { this.returnValue = returnValue; } public boolean isExecuted() { return executed; } public void setExecuted(boolean executed) { this.executed = executed; } public Guid getUserId() { return userId; } public void setUserId(Guid userId) { this.userId = userId; } public long getEngineSessionSeqId() { return engineSessionSeqId; } public void setEngineSessionSeqId(long engineSessionSeqId) { this.engineSessionSeqId = engineSessionSeqId; } public boolean isWaitingForEvent() { return waitingForEvent; } public void setWaitingForEvent(boolean waitingForEvent) { this.waitingForEvent = waitingForEvent; } public PersistedCommandContext getCommandContext() { return commandContext; } public void setCommandContext(PersistedCommandContext commandContext) { this.commandContext = commandContext; } }