package br.com.caelum.livraria.bean;
import java.io.Serializable;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.ValidatorException;
import javax.faces.view.ViewScoped;
import javax.inject.Named;
import br.com.caelum.livraria.dao.DAO;
import br.com.caelum.livraria.modelo.Autor;
import br.com.caelum.livraria.modelo.Livro;
@Named
@ViewScoped
public class LivroBean implements Serializable {
private static final long serialVersionUID = 1L;
private Livro livro = new Livro();
private Integer autorId;
private Integer livroId;
public void setGeneros(List<String> generos) {
this.generos = generos;
}
public Integer getLivroId() {
return livroId;
}
public void setLivroId(Integer livroId) {
this.livroId = livroId;
}
public Integer getAutorId() {
return autorId;
}
public void setAutorId(Integer autorId) {
this.autorId = autorId;
}
public void setLivro(Livro livro) {
this.livro = livro;
}
public Livro getLivro() {
return livro;
}
public List<Livro> getLivros() {
return new DAO<Livro>(Livro.class).listaTodos();
}
public String formAutor() {
System.out.println("Chamando o autor");
return "autor?faces-redirect=true";
}
public void gravar() {
System.out.println("Gravando livro " + this.livro.getTitulo());
if (livro.getAutores().isEmpty()) {
FacesContext.getCurrentInstance().addMessage("autor", new FacesMessage("Não pode cadastrar sem um autor"));
return;
}
if (this.livro.getId() == null) {
new DAO<Livro>(Livro.class).adiciona(this.livro);
} else {
new DAO<Livro>(Livro.class).atualiza(this.livro);
}
this.livro = new Livro();
}
public List<Autor> getAutores() {
return new DAO<Autor>(Autor.class).listaTodos();
}
public List<Autor> getAutoresDoLivro() {
return this.livro.getAutores();
}
public void gravarAutor() {
System.out.println("Gravando o autor" + this.autorId);
Autor autor = new DAO<Autor>(Autor.class).buscaPorId(this.autorId);
this.livro.adicionaAutor(autor);
System.out.println("Adiciona o autor " + autor.getNome());
}
public void alterar(Livro livro) {
this.livro = livro;
}
public void remover(Livro livro) {
System.out.println("Removendo o livro");
new DAO<Livro>(Livro.class).remove(livro);
}
public List<String> generos = Arrays.asList("Romance", "Drama", "Suspense", "Terror", "Epico", "Informática", "Ciência", "Filosofia");
public List<String> getGeneros() {
return generos;
}
public void removerAutor(Autor autor) {
this.livro.removeAutorSelecionado(autor);
}
public void comecaComDigitoUm(FacesContext fc, UIComponent component, Object value) throws ValidatorException {
String valor = value.toString();
if (!valor.startsWith("1")) {
throw new ValidatorException(new FacesMessage("ISBN deve começar com 1"));
}
}
public void carregarLivroPelaId() {
this.livro = new DAO<Livro>(Livro.class).buscaPorId(this.livro.getId());
}
public boolean precoEhMenor(Object valorColuna, Object filtroDigitado, Locale locale) {
// Tirando espaçõs do filtro
String textoDigitado = (filtroDigitado == null) ? null : filtroDigitado.toString().trim();
// filtro é nulo ou vazio
if (textoDigitado == null || textoDigitado.equals("")) {
return true;
}
// elemento da tabela é nulo
if (valorColuna == null) {
return false;
}
try {
// fazendo o parsing do filtro para converter para double
Double precoDigitado = Double.valueOf(textoDigitado);
Double precoColuna = (Double) valorColuna;
// comparando os valores compareTo devolve um valor negativo se o
// value é menor que o filtro
return precoColuna.compareTo(precoDigitado) < 0;
} catch (NumberFormatException e) {
// usuario não digitou um numero
return false;
}
}
}