package br.com.triadworks.issuetracker.controller; import java.io.Serializable; import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.annotation.PostConstruct; import javax.enterprise.inject.Produces; import javax.faces.model.SelectItem; import javax.inject.Inject; import javax.inject.Named; import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.ViewAccessScoped; import org.conventionsframework.bean.BaseMBean; import org.conventionsframework.bean.state.CrudState; import org.conventionsframework.qualifier.Service; import org.primefaces.event.SelectEvent; import br.com.triadworks.issuetracker.controller.util.FacesUtils; import br.com.triadworks.issuetracker.model.Issue; import br.com.triadworks.issuetracker.model.TipoDeIssue; import br.com.triadworks.issuetracker.model.Usuario; import br.com.triadworks.issuetracker.service.IssueService; @Named @ViewAccessScoped public class IssueBean extends BaseMBean<Issue> implements Serializable{ private Issue issue = new Issue(); @Inject private IssueService issueService; @Inject private UsuarioWeb usuarioWeb; @Inject private FacesUtils facesUtils; public IssueBean() { } @PostConstruct public void init(){ super.setBaseService(issueService); setBeanState(CrudState.FIND); super.init(); } public void lista() { setBeanState(CrudState.FIND); } public void preparaParaAdicionar() { this.issue = new Issue(); // issue.setProjeto(new Projeto()); // não mais necessário por causa do converter // issue.setAssinadoPara(new Usuario()); // não mais necessário por causa do converter issue.setReportadoPor(usuarioWeb.getUsuario()); issue.setReportadoEm(new Date()); setBeanState(CrudState.INSERT); } public void adiciona() { issueService.salva(issue); facesUtils.adicionaMensagemDeInformacao("Issue adicionada com sucesso!"); lista(); } public void remove() { issueService.remove(issue); facesUtils.adicionaMensagemDeInformacao("Issue removida com sucesso!"); lista(); } public void preparaParaAlterar(Issue projeto) { this.issue = issueService.crud().get(projeto.getId()); // evita LazyInitializationException setBeanState(CrudState.UPDATE); } public void altera() { issueService.atualiza(issue); facesUtils.adicionaMensagemDeInformacao("Issue atualizada com sucesso!"); lista(); } public void voltar() { this.issue = new Issue(); lista(); } public boolean isAdicionando() { return super.isInsertState(); } public boolean isEditando() { return super.isUpdateState(); } public boolean isPesquisando() { return super.isFindState(); } public Issue getIssue() { return issue; } public void setIssue(Issue projeto) { this.issue = projeto; } @Produces @Named("issueTypes") public List<SelectItem> getIssueTypes() { List<SelectItem> tipos = new ArrayList<SelectItem>(){{ add(new SelectItem(TipoDeIssue.TODOS.name(), "Todos")); add(new SelectItem(TipoDeIssue.BUG.name(), "Bug")); add(new SelectItem(TipoDeIssue.FEATURE.name(), "Feature")); }}; if(!isPesquisando()){ tipos.remove(0); } return tipos; } public void selecionaUsuario(SelectEvent event){ issue.setAssinadoPara((Usuario) event.getObject()); } }