package org.ovirt.engine.core.common.businessentities.gluster; import static org.ovirt.engine.core.common.businessentities.gluster.GlusterHookConflictFlags.CONTENT_CONFLICT; import static org.ovirt.engine.core.common.businessentities.gluster.GlusterHookConflictFlags.MISSING_HOOK; import static org.ovirt.engine.core.common.businessentities.gluster.GlusterHookConflictFlags.STATUS_CONFLICT; import java.util.ArrayList; import java.util.List; import java.util.Objects; import org.ovirt.engine.core.common.businessentities.BusinessEntity; import org.ovirt.engine.core.common.businessentities.IVdcQueryable; import org.ovirt.engine.core.compat.Guid; /** * The gluster hook entity. * * @see GlusterHookStage * @see GlusterHookStatus */ public class GlusterHookEntity implements IVdcQueryable, BusinessEntity<Guid> { private static final long serialVersionUID = -1139174348695506810L; private Guid id; private Guid clusterId; private String glusterCommand; private GlusterHookStage stage; private String name; private GlusterHookStatus status; private GlusterHookContentType contentType; private String checksum; private String content; private Integer conflictStatus; private List<GlusterServerHook> serverHooks; public GlusterHookEntity() { super(); id = Guid.newGuid(); conflictStatus = 0; serverHooks = new ArrayList<>(); } @Override public Guid getId() { return id; } @Override public void setId(Guid id) { this.id = id; } public Guid getClusterId() { return clusterId; } public void setClusterId(Guid clusterId) { this.clusterId = clusterId; } public String getGlusterCommand() { return this.glusterCommand; } public void setGlusterCommand(String glusterCommand) { this.glusterCommand = glusterCommand; } public GlusterHookStage getStage() { return stage; } public void setStage(GlusterHookStage stage) { this.stage = stage; } public void setStage(String stage) { this.stage = GlusterHookStage.valueOf(stage); } public String getName() { return this.name; } public void setName(String hookName) { this.name = hookName; } public Integer getConflictStatus() { return conflictStatus; } public void setConflictStatus(Integer conflictStatus) { this.conflictStatus = conflictStatus; } public GlusterHookContentType getContentType() { return contentType; } public void setContentType(GlusterHookContentType contentType) { this.contentType = contentType; } public void setContentType(String contentType) { if (contentType != null) { if (contentType.toLowerCase().contains("binary")) { this.contentType = GlusterHookContentType.BINARY; } else { this.contentType = GlusterHookContentType.TEXT; } } } public String getChecksum() { return checksum; } public void setChecksum(String checksum) { this.checksum = checksum; } public GlusterHookStatus getStatus() { return status; } public void setStatus(GlusterHookStatus status) { this.status = status; } public void setStatus(String status) { setStatus(GlusterHookStatus.valueOf(status)); } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public List<GlusterServerHook> getServerHooks() { return serverHooks; } public void setServerHooks(List<GlusterServerHook> serverHooks) { this.serverHooks = serverHooks; } public boolean isMissingHookConflict() { return (conflictStatus & MISSING_HOOK.getValue()) == MISSING_HOOK.getValue(); } public boolean isStatusConflict() { return (conflictStatus & STATUS_CONFLICT.getValue()) == STATUS_CONFLICT.getValue(); } public boolean isContentConflict() { return (conflictStatus & CONTENT_CONFLICT.getValue()) == CONTENT_CONFLICT.getValue(); } public void setConflictValue(boolean missingHook, boolean statusConflict, boolean contentConflict) { conflictStatus = 0; if (missingHook) { conflictStatus = conflictStatus | MISSING_HOOK.getValue(); } if (statusConflict) { conflictStatus = conflictStatus | STATUS_CONFLICT.getValue(); } if (contentConflict) { conflictStatus = conflictStatus | CONTENT_CONFLICT.getValue(); } } public void addStatusConflict() { conflictStatus = conflictStatus | STATUS_CONFLICT.getValue(); } public void addMissingConflict() { conflictStatus = conflictStatus | MISSING_HOOK.getValue(); } public void addContentConflict() { conflictStatus = conflictStatus | CONTENT_CONFLICT.getValue(); } public boolean hasConflicts() { return conflictStatus != null && conflictStatus > 0; } public void removeStatusConflict() { conflictStatus &= ~STATUS_CONFLICT.getValue(); } public void removeMissingConflict() { conflictStatus &= ~MISSING_HOOK.getValue(); } public void removeContentConflict() { conflictStatus &= ~CONTENT_CONFLICT.getValue(); } @Override public int hashCode() { return Objects.hash( id, clusterId, glusterCommand, stage, name, contentType, conflictStatus, checksum, status ); } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (!(obj instanceof GlusterHookEntity)) { return false; } GlusterHookEntity hook = (GlusterHookEntity) obj; return Objects.equals(id, hook.id) && Objects.equals(clusterId, hook.clusterId) && Objects.equals(glusterCommand, hook.glusterCommand) && stage == hook.stage && Objects.equals(name, hook.name) && contentType == hook.contentType && Objects.equals(conflictStatus, hook.conflictStatus) && Objects.equals(checksum, hook.checksum) && status == hook.status; } @Override public Object getQueryableId() { return getId(); } public String getHookKey() { return new StringBuilder().append(glusterCommand).append("-") .append(stage).append("-").append(name).toString(); } }