package com.griddynamics.jagger.jaas.storage.model; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonInclude; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.OneToMany; import javax.persistence.OneToOne; import javax.persistence.Table; import java.util.List; import static org.apache.commons.collections.CollectionUtils.isEqualCollection; @JsonInclude(JsonInclude.Include.NON_NULL) @Entity @Table(name = "test_environment_entity") public class TestEnvironmentEntity { public enum TestEnvironmentStatus { PENDING, RUNNING } @Id @Column(name = "`environment_id`") private String environmentId; @OneToMany(mappedBy = "testEnvironmentEntity", fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true) private List<LoadScenarioEntity> loadScenarios; @Column(nullable = false) @Enumerated(EnumType.STRING) private TestEnvironmentStatus status = TestEnvironmentStatus.PENDING; @OneToOne(cascade = CascadeType.ALL) @JoinColumn(name = "`running_load_scenario`") private LoadScenarioEntity runningLoadScenario; @JsonIgnore @Column(name = "`expiration_timestamp`") private long expirationTimestamp; @JsonIgnore @Column(name = "`session_id`") private String sessionId; public String getEnvironmentId() { return environmentId; } public void setEnvironmentId(String environmentId) { this.environmentId = environmentId; } public List<LoadScenarioEntity> getLoadScenarios() { return loadScenarios; } public void setLoadScenarios(List<LoadScenarioEntity> loadScenarios) { this.loadScenarios = loadScenarios; } public TestEnvironmentStatus getStatus() { return status; } public void setStatus(TestEnvironmentStatus status) { this.status = status; } public LoadScenarioEntity getRunningLoadScenario() { return runningLoadScenario; } public void setRunningLoadScenario(LoadScenarioEntity runningLoadScenario) { this.runningLoadScenario = runningLoadScenario; } public long getExpirationTimestamp() { return expirationTimestamp; } public void setExpirationTimestamp(long expirationTimestamp) { this.expirationTimestamp = expirationTimestamp; } public String getSessionId() { return sessionId; } public void setSessionId(String sessionId) { this.sessionId = sessionId; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null || getClass() != obj.getClass()) return false; TestEnvironmentEntity that = (TestEnvironmentEntity) obj; if (!environmentId.equals(that.environmentId)) return false; if (sessionId != null ? !sessionId.equals(that.sessionId) : that.sessionId != null) return false; if (loadScenarios != null && that.loadScenarios == null || loadScenarios == null && that.loadScenarios != null) return false; if (loadScenarios != null && that.getLoadScenarios() != null && !isEqualCollection(loadScenarios, that.loadScenarios)) return false; if (status != that.status) return false; if (expirationTimestamp != that.expirationTimestamp) return false; return runningLoadScenario != null ? runningLoadScenario.equals(that.runningLoadScenario) : that.runningLoadScenario == null; } @Override public int hashCode() { int result = environmentId.hashCode(); result = 31 * result + (loadScenarios != null ? loadScenarios.hashCode() : 0); result = 31 * result + status.hashCode(); result = 31 * result + (runningLoadScenario != null ? runningLoadScenario.hashCode() : 0); result = 31 * result + Long.hashCode(expirationTimestamp); result = 31 * result + sessionId.hashCode(); return result; } @Override public String toString() { return "TestEnvironmentEntity{" + "environmentId='" + environmentId + '\'' + ", loadScenarios=" + loadScenarios + ", status=" + status + ", runningLoadScenario=" + runningLoadScenario + ", expirationTimestamp=" + expirationTimestamp + ", sessionId=" + sessionId + '}'; } }