package edu.harvard.iq.dataverse; import edu.harvard.iq.dataverse.util.BundleUtil; import java.io.Serializable; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; 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.OneToMany; import java.util.List; import javax.persistence.Column; import javax.persistence.ManyToOne; import javax.persistence.OrderBy; import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.persistence.Transient; import org.apache.commons.lang.StringEscapeUtils; import org.hibernate.validator.constraints.NotBlank; /** * * @author skraffmiller */ @Entity public class Guestbook implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; /** * Holds value of the Dataverse */ @ManyToOne @JoinColumn(nullable=true) private Dataverse dataverse; @OneToMany(mappedBy="guestbook",cascade={CascadeType.REMOVE, CascadeType.MERGE, CascadeType.PERSIST},orphanRemoval=true) @OrderBy("displayOrder") private List<CustomQuestion> customQuestions; @NotBlank(message="Enter a name for the guestbook") private String name; private boolean enabled; private boolean nameRequired; private boolean emailRequired; private boolean institutionRequired; private boolean positionRequired; @Temporal(value = TemporalType.TIMESTAMP) @Column( nullable = false ) private Date createTime; /* WE PROBABLY NEED HELP INFO TEXT... * public String guestbook() { FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Edit Guestbook", " – Edit your dataset guestbook and click Save Changes. Asterisks indicate required fields.")); return null; } */ public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Dataverse getDataverse() { return dataverse; } public void setDataverse(Dataverse dataverse) { this.dataverse = dataverse; } public List<CustomQuestion> getCustomQuestions() { return customQuestions; } public void setCustomQuestions(List<CustomQuestion> customQuestions) { this.customQuestions = customQuestions; } public String getName() { return name; } public void setName(String name) { this.name = name; } public boolean isEnabled() { return enabled; } public void setEnabled(boolean enabled) { this.enabled = enabled; } public boolean isNameRequired() { return nameRequired; } public void setNameRequired(boolean nameRequired) { this.nameRequired = nameRequired; } public boolean isEmailRequired() { return emailRequired; } public void setEmailRequired(boolean emailRequired) { this.emailRequired = emailRequired; } public boolean isInstitutionRequired() { return institutionRequired; } public void setInstitutionRequired(boolean institutionRequired) { this.institutionRequired = institutionRequired; } public boolean isPositionRequired() { return positionRequired; } public void setPositionRequired(boolean positionRequired) { this.positionRequired = positionRequired; } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } public String getCreateDate() { return new SimpleDateFormat("MMMM d, yyyy").format(createTime); } public Guestbook copyGuestbook(Guestbook source, Dataverse dataverse) { Guestbook newGuestbook = new Guestbook(); newGuestbook.setDataverse(dataverse); newGuestbook.setEmailRequired(source.isEmailRequired()); newGuestbook.setNameRequired(source.isNameRequired()); newGuestbook.setPositionRequired(source.isPositionRequired()); newGuestbook.setInstitutionRequired(source.isInstitutionRequired()); newGuestbook.setCustomQuestions(new ArrayList<CustomQuestion>()); if (!source.getCustomQuestions().isEmpty()) { for (CustomQuestion sq: source.getCustomQuestions()){ CustomQuestion target = new CustomQuestion(); target.setQuestionType(sq.getQuestionType()); target.setGuestbook(newGuestbook); target.setHidden(sq.isHidden()); target.setRequired(sq.isRequired()); target.setDisplayOrder(sq.getDisplayOrder()); target.setQuestionString(sq.getQuestionString()); if(!sq.getCustomQuestionValues().isEmpty()){ target.setCustomQuestionValues(new ArrayList<CustomQuestionValue>()); for (CustomQuestionValue scqv: sq.getCustomQuestionValues()){ CustomQuestionValue newVal = new CustomQuestionValue(); newVal.setValueString(scqv.getValueString()); newVal.setCustomQuestion(target); target.getCustomQuestionValues().add(newVal); } } newGuestbook.getCustomQuestions().add(target); } } return newGuestbook; } @Transient private boolean deletable; public boolean isDeletable() { return deletable; } public void setDeletable(boolean deletable) { this.deletable = deletable; } public List<String> getRequiredAccountInformation() { List<String> retList = new ArrayList(); if (nameRequired) { retList.add(BundleUtil.getStringFromBundle("name")); } if (emailRequired) { retList.add(BundleUtil.getStringFromBundle("email")); } if (institutionRequired) { retList.add(BundleUtil.getStringFromBundle("institution")); } if (positionRequired) { retList.add(BundleUtil.getStringFromBundle("position")); } return retList; } public List<String> getOptionalAccountInformation(){ List <String> retList = new ArrayList(); if(!nameRequired){ retList.add(BundleUtil.getStringFromBundle("name")); } if(!emailRequired){ retList.add(BundleUtil.getStringFromBundle("email")); } if(!institutionRequired){ retList.add(BundleUtil.getStringFromBundle("institution")); } if(!positionRequired){ retList.add(BundleUtil.getStringFromBundle("position")); } return retList; } public List<String> getRequiredQuestionsList(){ List <String> retList = new ArrayList(); for (CustomQuestion cq : this.getCustomQuestions()){ if(cq.isRequired()){ retList.add(cq.getQuestionString()); } } return retList; } public List<String> getOptionalQuestionsList(){ List <String> retList = new ArrayList(); for (CustomQuestion cq : this.getCustomQuestions()){ if(!cq.isRequired()){ retList.add(cq.getQuestionString()); } } return retList; } public void removeCustomQuestion(int index){ customQuestions.remove(index); } public void addCustomQuestion(int index, CustomQuestion cq){ customQuestions.add(index, cq); } @Transient private Long usageCount; public Long getUsageCount() { return usageCount; } public void setUsageCount(Long usageCount) { this.usageCount = usageCount; } @Transient private Long usageCountDataverse; public Long getUsageCountDataverse() { return usageCountDataverse; } public void setUsageCountDataverse(Long usageCountDataverse) { this.usageCountDataverse = usageCountDataverse; } @Transient private Long responseCount; public Long getResponseCount() { return responseCount; } public void setResponseCount(Long responseCount) { this.responseCount = responseCount; } @Transient private Long responseCountDataverse; public Long getResponseCountDataverse() { return responseCountDataverse; } public void setResponseCountDataverse(Long responseCountDataverse) { this.responseCountDataverse = responseCountDataverse; } }