package edu.harvard.iq.dataverse; import java.io.Serializable; import java.util.List; import java.util.Objects; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Index; import javax.persistence.JoinColumn; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.OneToMany; import javax.persistence.OneToOne; import javax.persistence.OrderBy; import javax.persistence.Table; import javax.persistence.Transient; /** * * @author skraffmiller */ @Table(indexes = {@Index(columnList="name") , @Index(columnList="owner_id")}) @NamedQueries({ @NamedQuery( name="MetadataBlock.listAll", query = "SELECT mdb FROM MetadataBlock mdb"), @NamedQuery( name="MetadataBlock.findByName", query = "SELECT mdb FROM MetadataBlock mdb WHERE mdb.name=:name") }) @Entity public class MetadataBlock implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column( nullable = false ) private String name; @Column( nullable = false ) private String displayName; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @OneToMany(mappedBy = "metadataBlock", cascade = {CascadeType.REMOVE, CascadeType.MERGE, CascadeType.PERSIST}) @OrderBy("displayOrder") private List<DatasetFieldType> datasetFieldTypes; public List<DatasetFieldType> getDatasetFieldTypes() { return datasetFieldTypes; } public void setDatasetFieldTypes(List<DatasetFieldType> datasetFieldTypes) { this.datasetFieldTypes = datasetFieldTypes; } public boolean isDisplayOnCreate() { for (DatasetFieldType dsfType : datasetFieldTypes) { if (dsfType.isDisplayOnCreate()) { return true; } } return false; } public String getDisplayName() { return displayName; } public void setDisplayName(String displayName) { this.displayName = displayName; } public boolean isRequired() { // eventually this will be dynamic, for now only citation is required return "citation".equals(name); } @OneToOne @JoinColumn(name="owner_id", unique=false, nullable=true, insertable=true, updatable=true) private Dataverse owner; public Dataverse getOwner() { return owner; } public void setOwner(Dataverse owner) { this.owner = owner; } @Transient private boolean empty; public boolean isEmpty() { return empty; } public void setEmpty(boolean empty) { this.empty = empty; } @Transient private boolean selected; public void setSelected(boolean selected) { this.selected = selected; } public boolean isSelected() { return selected; } @Transient private boolean hasRequired; public void setHasRequired(boolean hasRequired) { this.hasRequired = hasRequired; } public boolean isHasRequired() { return hasRequired; } public String getIdString(){ return id.toString(); } @Transient private boolean showDatasetFieldTypes; public void setShowDatasetFieldTypes(boolean showDatasetFieldTypes) { this.showDatasetFieldTypes = showDatasetFieldTypes; } public boolean isShowDatasetFieldTypes() { return showDatasetFieldTypes; } @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 MetadataBlock)) { return false; } MetadataBlock other = (MetadataBlock) 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.MetadataBlock[ id=" + id + " ]"; } }