package cn.newgxu.bbs.domain.vote; import java.util.LinkedHashMap; import java.util.LinkedList; 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.OneToMany; import javax.persistence.OrderBy; import javax.persistence.Table; import org.apache.commons.lang.StringUtils; import cn.newgxu.bbs.common.Pagination; import cn.newgxu.bbs.domain.user.User; import cn.newgxu.jpamodel.JPAEntity; import cn.newgxu.jpamodel.ObjectNotFoundException; /** * * @author polly * @since 4.0.0 * @version $Revision 1.1$ */ @Entity @Table(name = "vote") public class Vote extends JPAEntity { private static final long serialVersionUID = -5378284626221146520L; @Id @Column(name = "id") // @GeneratedValue(strategy = GenerationType.SEQUENCE,generator="id_seq") // @SequenceGenerator(name="id_seq", sequenceName="seq_vote") @GeneratedValue(strategy = GenerationType.IDENTITY) private int id = -1; private boolean multi; @Column(name = "options_count") private int count; @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinColumn(name="vote_id") @OrderBy("id") private List<VoteOption> options; @Column(name = "number_of_vote_users") private int numberOfVoteUsers; public int getCount() { return count; } public void setCount(int count) { this.count = count; } public int getId() { return id; } public void setId(int id) { this.id = id; } public boolean isMulti() { return multi; } public void setMulti(boolean multi) { this.multi = multi; } public List<VoteOption> getOptions() { return options; } public void setOptions(List<VoteOption> options) { this.options = options; } public int getNumberOfVoteUsers() { return numberOfVoteUsers; } public void setNumberOfVoteUsers(int numberOfVoteUsers) { this.numberOfVoteUsers = numberOfVoteUsers; } // ------------------------------------------------ public void addOption(String o) { if (options == null) { options = new LinkedList<VoteOption>(); } VoteOption option = new VoteOption(); option.setOption(o); option.setScore(0); option.setVote(this); options.add(option); setCount(options.size()); } public boolean isVoted(User user) { try { SQ("from VoteUser vu where vu.vote = ?1 and vu.user = ?2", P(1, this), P(2, user)); return true; } catch (ObjectNotFoundException e) { return false; } } @SuppressWarnings("unchecked") public List<User> getVotedUsers(Pagination p) { return (List<User>) Q( "from VoteUser vu where vu.vote = ?1 order by vu.id asc", P(1, this), p).getResultList(); } public String getVoteDisplay() { StringBuffer result = new StringBuffer( "<script language=\"JavaScript\">"); StringBuffer vote = new StringBuffer(); StringBuffer votenum = new StringBuffer(); int voters = 0; for (VoteOption option : getOptions()) { vote.append(StringUtils.replace(option.getOption(), "'", "\\'")) .append("|"); votenum.append(option.getScore()).append("|"); voters += option.getScore(); } result.append("var vote='").append( StringUtils.removeEnd(vote.toString(), "|")); result.append("';var votenum='").append( StringUtils.removeEnd(votenum.toString(), "|")); result.append("';var votetype='").append(isMulti() ? 1 : 0).append( "';var voters='"); result.append(voters).append("';</script>"); return result.toString(); } public void addVoteUser(User user) { VoteUser vu = new VoteUser(); vu.setUser(user); vu.setVote(this); vu.save(); this.numberOfVoteUsers++; } // ------------------------------------------------ @SuppressWarnings("serial") @Override public String toString() { return "vote" + new LinkedHashMap<String, Object>() { { put("id", id); put("multi", multi); put("count", count); put("options", options); } }.toString(); } }