-
Notifications
You must be signed in to change notification settings - Fork 1
/
Loja.java
107 lines (88 loc) · 3.22 KB
/
Loja.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import java.util.ArrayList;
/**
* Loja virtual para a venda de livros (a princípio).
*/
public class Loja {
private String nomeDaLoja;
private ArrayList<Vendavel> catalogo;
private Transportadora frete;
public Loja(Transportadora transportadora) {
catalogo = new ArrayList<>(); // COMPOSIÇÃO
setFrete(transportadora); // AGREGAÇÃO
}
public void setFrete(Transportadora transportadora) {
frete = transportadora;
}
public String receberPedido(ArtigoCultural item, int quantidade, Usuario usuario) {
// verifica se existe no catálogo da loja
if (buscarItem(item.getId()) == null) {
// ToDo lançar uma exceção específica
return null;
}
// verifica se o usuário tem um endereço de entrega válido
if (usuario.getEndereco() == null) {
// Todo lançar uma exceção específica
return null;
}
float precoTotal = quantidade * item.getPrecoEmReais();
if (!processarPagamento(precoTotal)) {
// ToDo lançar uma exceção específica
return null;
}
// cria um array com todos os itens que precisarão ser entregues
// (possivelmente várias unidades do mesmo item)
ArrayList<Transportavel> pedido = new ArrayList<>();
for (int i = 0; i < quantidade; i++) {
pedido.add(item);
}
frete.transportar(pedido, usuario.getEndereco());
String recibo = String.format("Recibo no valor de R$%.2f referente à " +
"compra de %d unidades do item: %s",
precoTotal, quantidade, item);
return recibo;
}
public void incluirItem(Vendavel vendavel) {
if (buscarItem(vendavel.getId()) != null) {
// produto já existe no catálogo -- nada a fazer
return;
}
catalogo.add(vendavel);
}
/**
* Busca um ítem no catálogo da loja a partir de sua descrição.
*
* @param descricao a descrição do ítem desejado (ou parte dela)
* @return o primeiro Vendavel que case com a descrição fornecida, caso encontre;
* ou null, caso contrário
*/
public Vendavel buscarItem(String descricao) {
for (Vendavel item : catalogo) {
if (item.getDescricao().contains(descricao)) {
return item;
}
}
return null;
}
/**
* Busca um ítem no catálogo da loja a partir de seu código.
*
* @param id o código de identificação do ítem desejado
* @return o Vendavel cujo código seja igual ao código fornecido, caso encontre;
* ou null, caso contrário
*/
public Vendavel buscarItem(long id) {
for (Vendavel item : catalogo) {
if (item.getId() == id) {
return item;
}
}
return null;
}
private boolean processarPagamento(float valor) {
// ToDo passar o cartão de crédito, ou emitir boleto, etc.
System.out.println(String.format(
"Processando pagamento no valor de R$%.2f...",
valor));
return true; // ToDo retornar false caso o pagamento falhe
}
}