package br.usp.ime.academicdevoir.entidade; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Inheritance; import javax.persistence.InheritanceType; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.ManyToMany; import org.hibernate.annotations.OnDelete; import org.hibernate.annotations.OnDeleteAction; import br.usp.ime.academicdevoir.dao.TagDao; import br.usp.ime.academicdevoir.infra.Constantes; import br.usp.ime.academicdevoir.infra.TipoDeQuestao; @Entity @Inheritance(strategy = InheritanceType.JOINED) @OnDelete(action = OnDeleteAction.CASCADE) public abstract class Questao { /** * @uml.property name="id" */ @Id @GeneratedValue private Long id; @Column(length = Constantes.MAX_TAM_CAMPO) protected String enunciado; @ManyToMany(fetch = FetchType.LAZY) @JoinTable(name = "tags_questoes", joinColumns = { @JoinColumn(name = "id_questao") }, inverseJoinColumns = { @JoinColumn(name = "id_tag") }) protected List<Tag> tags = new ArrayList<Tag>(); /** * @return * @uml.property name="id" */ public Long getId() { return id; } /** * @param id * @uml.property name="id" */ public void setId(Long id) { this.id = id; } /** * @return * @uml.property name="enunciado" */ public String getEnunciado() { return enunciado; } /** * @param enunciado * @uml.property name="enunciado" */ public void setEnunciado(String enunciado) { this.enunciado = enunciado; } public List<Tag> getTags() { return tags; } public String getTagsEmString() { StringBuffer buffer = new StringBuffer(); for (Tag tag : this.tags) { buffer.append(tag.getNome()); buffer.append(", "); } return buffer.toString(); } public void setTags(List<Tag> tags) { this.tags = tags; } public void setTags(String stringTags, TagDao dao) { if (stringTags == null) return; List<String> tags = Arrays.asList( stringTags.split(",[ ]*") ); for (String nome : tags) { Tag tag = dao.buscaPeloNome(nome); if (tag == null) { tag = new Tag(nome); dao.salva(tag); } this.tags.add(tag); } } public abstract TipoDeQuestao getTipo(); public abstract String getRenderizacao(); public abstract String getRenderAlteracao(Resposta resposta); public String getRenderCorrecao (Resposta resposta) { if (resposta == null) resposta = new Resposta(); String htmlResult = ""; StringBuffer buffer = new StringBuffer(); buffer.append("<p>"); if (resposta.getValor() != null) buffer.append(resposta.getValor()); buffer.append("</p>"); buffer.append("<p> Comentários: "); if (resposta.getComentario() != null) buffer.append(resposta.getComentario()); buffer.append("</p>"); buffer.append("<p> Nota: "); if (resposta.getNota() != null) buffer.append(resposta.getNota()); buffer.append("</p>"); htmlResult = buffer.toString(); return htmlResult; } public abstract Boolean respostaDoAlunoEhCorreta(Resposta respostaAluno); public abstract Questao copia(TagDao tagDao); }