package br.com.triadworks.issuetracker.controller.dashboard;
import java.io.Serializable;
import javax.inject.Inject;
import javax.inject.Named;
import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.ViewAccessScoped;
import br.com.triadworks.issuetracker.controller.UsuarioWeb;
import br.com.triadworks.issuetracker.controller.util.FacesUtils;
import br.com.triadworks.issuetracker.model.Comentario;
import br.com.triadworks.issuetracker.model.Issue;
import br.com.triadworks.issuetracker.service.IssueService;
@Named
@ViewAccessScoped
public class DetalheDaIssueBean implements Serializable{
private Long id;
private Issue issue;
private Comentario comentario = new Comentario();
private IssueService issueService;
private UsuarioWeb usuarioWeb;
private FacesUtils facesUtils;
public DetalheDaIssueBean() {
}
@Inject
public DetalheDaIssueBean(IssueService issueService, UsuarioWeb usuarioWeb, FacesUtils facesUtils) {
this.issueService = issueService;
this.usuarioWeb = usuarioWeb;
this.facesUtils = facesUtils;
}
/**
* Maneira simples de tratar requisições <code>GET</code> sem aproveitar os
* recursos do componente <code>f:viewParam</code>.
*/
public void init() {
if (id == null) {
String mensagem = "ID da issue inválida, por favor use um link de dentro do sistema.";
facesUtils.adicionaMensagemDeErro(mensagem);
return;
}
issue = issueService.carrega(id);
if (issue == null) {
String mensagem = "Issue com ID #" + id + " não encontrada.";
facesUtils.adicionaMensagemDeErro(mensagem);
}
}
/**
* Comenta a issue em questão.
*/
public void comentaIssue() {
comentario.setAutor(usuarioWeb.getUsuario());
issueService.comenta(issue.getId(), comentario);
limpa();
}
/**
* Comenta e Fecha a issue em questão.
*/
public void fechaIssue() {
comentario.setAutor(usuarioWeb.getUsuario());
issueService.fecha(issue.getId(), comentario);
limpa();
}
/**
* Limpa comentário e recarrega issue, pois a issue estava detached.
*/
private void limpa() {
issue = issueService.carrega(issue.getId());
comentario = new Comentario();
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Issue getIssue() {
return issue;
}
public void setIssue(Issue issue) {
this.issue = issue;
}
public Comentario getComentario() {
return comentario;
}
public void setComentario(Comentario comentario) {
this.comentario = comentario;
}
}