Os materiais didáticos aqui disponibilizados estão licenciados através de Creative Commons Atribuição-SemDerivações-SemDerivados CC BY-NC-ND. Você possui a permissão para visualizar e compartilhar, desde que atribua os créditos do autor. Não poderá alterá-los e nem utilizá-los para fins comerciais.
Atribuição-SemDerivações-SemDerivados
CC BY-NC-ND
Cursos / Informática para Internet / Desenvolvimento Web I / Aula
Essa operação pega uma lista como parâmetro e retorna uma lista com os mesmos elementos, porém, seus métodos de modificação da lista (adicionar e remover) irão levantar uma exceção se executados. Isso é opcional, mas garante que apenas a lista original, guardada pela classe Livraria, poderá ser modificada. Essa garantia nos permite saber que apenas métodos da classe Livraria podem adicionar ou remover livros da lista, evitando que essas operações sejam executadas “sem querer” por outras partes do código que tiveram acesso a ela pelo método getLivros().
Outro método de busca disponível é o getLivro(), o qual recebe um código e retorna o livro relacionado àquele código (linhas 50 a 52) ou levanta a exceção LivroNaoEncontradoException (linhas 55 a 58), caso não exista no estoque nenhum livro com o código passado. Essa exceção foi definida por nós e seu código é visto mais adiante, na Listagem 5.
public List<Livro> getLivros() {
return Collections.unmodifiableList(estoqueLivros);
}
public Livro getLivro(String idLivro) throws LivroNaoEncontradoException {
Livro livroProcurado = null;
for (Livro book : estoqueLivros) {
if (book.getIdLivro().equals(idLivro)) {
livroProcurado = book;
}
}
if (livroProcurado == null) {
throw new LivroNaoEncontradoException(
"Não foi possível encontrar o livro: " + idLivro);
}
return livroProcurado;
}
Por fim, a classe Livraria possui métodos relacionados à compra de livros. O primeiro deles é o método comprarLivros(), que recebe como parâmetro um carrinho de compras contendo os livros selecionados pelo usuário. Esse método é apresentado na Listagem 4.3, linha 63. Basicamente, os produtos contidos no carrinho são analisados (linhas 67 a 73) um por um, e, para cada livro, o método comprarLivro() é executado. Esse método é mostrado na linha 76 e, dado o código de um livro e a quantidade a ser comprada, é responsável por:
public void comprarLivros(CarrinhoCompras carrinho) throws CompraException {
Collection<ItemCompra> items = carrinho.getItens();
Iterator<ItemCompra> i = items.iterator();
while (i.hasNext()) {
ItemCompra item = (ItemCompra) i.next();
Livro livro = (Livro) item.getItem();
String id = livro.getIdLivro();
int quantity = item.getQuantidade();
comprarLivro(id, quantity);
}
}
public void comprarLivro(String idLivro, int qtdComprada) throws CompraException {
Livro livroSelecionado;
try {
livroSelecionado = getLivro(idLivro);
} catch (LivroNaoEncontradoException e) {
throw new CompraException(e.getMessage());
}
int qtdEstoque = livroSelecionado.getQuantidade();
if ((qtdEstoque - qtdComprada) >= 0) {
int novaQtd = qtdEstoque - qtdComprada;
livroSelecionado.setQuantidade(novaQtd);
} else {
throw new CompraException("Livro " + idLivro
+ " sem estoque suficiente.");
}
}
public void fechar() {
// liberaria conexões de banco de dados, se usasse
}
Versão 5.3 - Todos os Direitos reservados