/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package edu.harvard.iq.dataverse;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.validation.constraints.Size;
import javax.persistence.OrderBy;
import org.hibernate.validator.constraints.NotBlank;
import org.hibernate.validator.constraints.URL;
import edu.harvard.iq.dataverse.datavariable.DataVariable;
import java.util.Objects;
import javax.persistence.Column;
import javax.persistence.Index;
import javax.persistence.Table;
/**
*
* @author Leonid Andreev
*
* Largely based on the the DataTable entity from the DVN v2-3;
* original author: Ellen Kraffmiller (2006).
*
*/
@Entity
@Table(indexes = {@Index(columnList="datafile_id")})
public class DataTable implements Serializable {
/** Creates a new instance of DataTable */
public DataTable() {
}
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
/**
* unf: the Universal Numeric Signature of the
* data table.
*/
@Column( nullable = false )
private String unf;
/*
* caseQuantity: Number of observations
*/
private Long caseQuantity;
/*
* varQuantity: Number of variables
*/
private Long varQuantity;
/*
* recordsPerCase: this property is specific to fixed-field data files
* in which rows of observations may represented by *multiple* lines.
* The only known use case (so far): the fixed-width data files from
* ICPSR.
*/
private Long recordsPerCase;
/*
* DataFile that stores the data for this DataTable
*/
@ManyToOne
@JoinColumn(nullable=false)
private DataFile dataFile;
/*
* DataVariables in this DataTable:
*/
@OneToMany (mappedBy="dataTable", cascade={ CascadeType.REMOVE, CascadeType.MERGE,CascadeType.PERSIST})
@OrderBy ("fileOrder")
private List<DataVariable> dataVariables;
/*
* originalFileType: the format of the file from which this data table was
* extracted (STATA, SPSS, R, etc.)
* Note: this was previously stored in the StudyFile.
*/
private String originalFileFormat;
/*
* originalFormatVersion: the version/release number of the original file
* format; for example, STATA 9, SPSS 12, etc.
*/
private String originalFormatVersion;
/*
* Getter and Setter methods:
*/
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
public String getUnf() {
return this.unf;
}
public void setUnf(String unf) {
this.unf = unf;
}
public Long getCaseQuantity() {
return this.caseQuantity;
}
public void setCaseQuantity(Long caseQuantity) {
this.caseQuantity = caseQuantity;
}
public Long getVarQuantity() {
return this.varQuantity;
}
public void setVarQuantity(Long varQuantity) {
this.varQuantity = varQuantity;
}
public Long getRecordsPerCase() {
return recordsPerCase;
}
public void setRecordsPerCase(Long recordsPerCase) {
this.recordsPerCase = recordsPerCase;
}
public DataFile getDataFile() {
return this.dataFile;
}
public void setDataFile(DataFile dataFile) {
this.dataFile = dataFile;
}
public List<DataVariable> getDataVariables() {
return this.dataVariables;
}
public void setDataVariables(List<DataVariable> dataVariables) {
this.dataVariables = dataVariables;
}
public String getOriginalFileFormat() {
return originalFileFormat;
}
public void setOriginalFileFormat(String originalFileType) {
this.originalFileFormat = originalFileType;
}
public String getOriginalFormatVersion() {
return originalFormatVersion;
}
public void setOriginalFormatVersion(String originalFormatVersion) {
this.originalFormatVersion = originalFormatVersion;
}
/*
* Custom overrides for hashCode(), equals() and toString() methods:
*/
@Override
public int hashCode() {
int hash = 0;
hash += (this.id != null ? this.id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
if (!(object instanceof DataTable)) {
return false;
}
DataTable other = (DataTable)object;
return !(!Objects.equals(this.id, other.id) && (this.id == null || !this.id.equals(other.id)));
}
@Override
public String toString() {
return "edu.harvard.iq.dataverse.DataTable[ id=" + id + " ]";
}
}