/** * TestCube is an enterprise Test management tool. * Copyright (C) 2011 JatakaSource Ltd. * * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * TestCube is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with TestCube. If not, see <http://www.gnu.org/licenses/>. */ package org.jatakasource.testcube.model.testrun; import java.util.Date; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.Lob; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.SequenceGenerator; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy; import org.hibernate.annotations.Fetch; import org.hibernate.annotations.FetchMode; import org.hibernate.annotations.ForeignKey; import org.hibernate.annotations.Index; import org.hibernate.annotations.Type; import org.jatakasource.testcube.model.product.Build; import org.jatakasource.testcube.model.product.Environment; import org.jatakasource.testcube.model.product.Version; import org.jatakasource.testcube.model.security.User; import org.jatakasource.testcube.model.testplan.TestPlan; @Entity @Table(name = "CUB_TESTRUNS") @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) public class TestRun extends TestRunPojo { private static final long serialVersionUID = 7141328925130209722L; public static final String COLUMN_TESTPLAN = "testplan_id"; public static final String FIELD_TESTPLAN = "testPlan"; public static final String FIELD_TESTPLAN_ALIAS = "tp"; public TestRun() { } public TestRun(Long id) { super.setId(id); } @Id @SequenceGenerator(name = "CUB_TESTRUNS_SEQ", sequenceName = "CUB_TESTRUNS_SEQ", initialValue = 0) @GeneratedValue(strategy = GenerationType.AUTO, generator = "CUB_TESTRUNS_SEQ") @Override public Long getId() { return super.getId(); } @Override public void setId(Long id) { super.setId(id); } @Override @Column(length = FIELD_DESC_LENGTH, nullable = false) @Index(name = "IDX_NAME") public String getName() { return super.getName(); } @Lob @Column @Type(type = "org.hibernate.type.StringClobType") @Override public String getDescription() { return super.getDescription(); } @Override public void setDescription(String description) { super.setDescription(description); } @Override @ManyToOne(fetch = FetchType.EAGER, optional = false) @Fetch(FetchMode.SELECT) @ForeignKey(name = "FK_TESTRUNS_TESTPLAN") @Index(name = "IDX_TESTRUNS_TESTPLAN") public TestPlan getTestPlan() { return (TestPlan) super.getTestPlan(); } public void setTestPlan(TestPlan testPlan) { super.setTestPlan(testPlan); } @Override @Column(updatable = false) @Temporal(TemporalType.TIMESTAMP) public Date getCreatedDate() { return super.getCreatedDate(); } @Override public void setCreatedDate(Date createdDate) { super.setCreatedDate(createdDate); } @Override @ManyToOne(fetch = FetchType.EAGER, optional = false) @JoinColumn(updatable = false) @Fetch(FetchMode.SELECT) @ForeignKey(name = "FK_CREATEDBY_USERS") @Index(name = "IDX_CREATEDBY_USERS") public User getCreatedBy() { return (User) super.getCreatedBy(); } public void setCreatedBy(User createdBy) { super.setCreatedBy(createdBy); } @Override @ManyToOne(fetch = FetchType.EAGER) @Fetch(FetchMode.SELECT) @ForeignKey(name = "FK_ASSIGNEE_USERS") @Index(name = "IDX_ASSIGNEE_USERS") public User getAssignee() { return (User) super.getAssignee(); } public void setAssignee(User assignee) { super.setAssignee(assignee); } @Override @ManyToOne(fetch = FetchType.EAGER, optional = false) @Fetch(FetchMode.SELECT) @ForeignKey(name = "FK_PRODUCT_VERSION") @Index(name = "IDX_PRODUCT_VERSION") public Version getProductVersion() { return (Version) super.getProductVersion(); } public void setProductVersion(Version productVersion) { super.setProductVersion(productVersion); } @Override @ManyToOne(fetch = FetchType.EAGER) @Fetch(FetchMode.SELECT) @ForeignKey(name = "FK_PRODUCT_BUILD") @Index(name = "IDX_PRODUCT_BUILD") public Build getProductBuild() { return (Build) super.getProductBuild(); } public void setProductBuild(Build productBuild) { super.setProductBuild(productBuild); } @Override @ManyToOne(fetch = FetchType.EAGER) @Fetch(FetchMode.SELECT) @ForeignKey(name = "FK_PRODUCT_ENVIRONMENT") @Index(name = "IDX_PRODUCT_ENVIRONMENT") public Environment getProductEnvironment() { return (Environment) super.getProductEnvironment(); } public void setProductEnvironment(Environment productEnvironment) { super.setProductEnvironment(productEnvironment); } @Override @ManyToOne(fetch = FetchType.EAGER, optional = false) @Fetch(FetchMode.SELECT) @ForeignKey(name = "FK_RUN_STATUS") @Index(name = "IDX_RUN_STATUS") public RunStatus getStatus() { return (RunStatus) super.getStatus(); } public void setStatus(RunStatus status) { super.setStatus(status); } @Override @SuppressWarnings("unchecked") @OneToMany(mappedBy = "testRun", cascade = CascadeType.ALL, fetch = FetchType.LAZY) @Fetch(FetchMode.SELECT) // Setting this FetchMode to JOIN will duplicate rows when querying for TestRun. public List<TestRunResult> getResults() { return super.getResults(); } @Override public <T extends TestRunResultPojo> void setResults(List<T> results) { super.setResults(results); } }