diff --git a/pom.xml b/pom.xml
index 934e6ee..af650ab 100644
--- a/pom.xml
+++ b/pom.xml
@@ -62,7 +62,7 @@
exec-maven-plugin
3.0.0
- br.ufpr.lpoo.controllers.Sistema
+ br.ufpr.lpoo.Sistema
@@ -82,7 +82,7 @@
true
- br.ufpr.lpoo.controllers.Sistema
+ br.ufpr.lpoo.Sistema
false
diff --git a/src/main/java/br/ufpr/lpoo/controllers/Sistema.java b/src/main/java/br/ufpr/lpoo/Sistema.java
similarity index 55%
rename from src/main/java/br/ufpr/lpoo/controllers/Sistema.java
rename to src/main/java/br/ufpr/lpoo/Sistema.java
index b54944f..2cce0b7 100644
--- a/src/main/java/br/ufpr/lpoo/controllers/Sistema.java
+++ b/src/main/java/br/ufpr/lpoo/Sistema.java
@@ -1,12 +1,11 @@
-package br.ufpr.lpoo.controllers;
+package br.ufpr.lpoo;
import br.ufpr.lpoo.models.*;
+import br.ufpr.lpoo.utils.Imagens;
import br.ufpr.lpoo.views.Home;
import javax.swing.*;
import java.awt.*;
-import java.util.ArrayList;
-import java.util.List;
import java.util.Stack;
/**
@@ -16,8 +15,6 @@
public class Sistema {
private static final JFrame frame = new JFrame("Banco TADS");
private static final Stack navegacao = new Stack<>();
- static final List clientes = new ArrayList<>();
- static final List contas = new ArrayList<>();
/**
* Método que seta o conteúdo do frame para a tela que está no topo da pilha de navegação
@@ -46,38 +43,6 @@ public static void goBack(){
navigate();
}
- /**
- * Método que cadastra um cliente na lista de clientes
- * @param cliente
- */
- public static void cadastrarCliente(Cliente cliente){
- clientes.add(cliente);
- }
-
- /**
- * Método que cadastra uma conta na lista de contas
- * @param conta
- */
- public static void cadastrarConta(Conta conta){
- contas.add(conta);
- }
-
- /**
- * Método que retorna a lista de clientes
- * @return List
- */
- public static List getClientes(){
- return clientes;
- }
-
- /**
- * Método que retorna a lista de contas
- * @return List
- */
- public static List getContas(){
- return contas;
- }
-
/**
* Método main que inicializa a aplicação
*
@@ -88,12 +53,11 @@ public static List getContas(){
* Define a operação padrão de fechamento da janela como EXIT_ON_CLOSE
* Chama o método navigate()
* Define a janela como visível
- * Inicializa 3 clientes e os cadastra
*/
public static void main(String[] args){
Home home = new Home();
navegacao.push(home);
- Dimension dimension = new Dimension(700,500);
+ Dimension dimension = new Dimension(800,550);
Image image = Imagens.MAIN.image();
frame.setIconImage(image);
frame.setMinimumSize(dimension);
@@ -102,18 +66,5 @@ public static void main(String[] args){
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
navigate();
frame.setVisible(true);
-
- Endereco endereco1 = new Endereco("Rua A", "Prado Velho", "250", "Curitiba");
- Cliente c1 = new Cliente("Pedro", "Souza", endereco1, "948.312.270-80", "129711280");
- cadastrarCliente(c1);
-
- Endereco endereco2 = new Endereco("Rua B", "Cajuru", "1134", "Curitiba");
- Cliente c2 = new Cliente("Alisson", "Santos", endereco2, "885.434.710-87", "119264210");
- cadastrarCliente(c2);
-
- Endereco endereco3 = new Endereco("Rua C", "Jardim Amélia", "65", "Pinhais");
- Cliente c3 = new Cliente("Leonardo", "Salgado", endereco3, "632.872.080-71", "129321481");
- cadastrarCliente(c3);
}
-
}
diff --git a/src/main/java/br/ufpr/lpoo/controllers/ManipularContaController.java b/src/main/java/br/ufpr/lpoo/controllers/ManipularContaController.java
new file mode 100644
index 0000000..885b045
--- /dev/null
+++ b/src/main/java/br/ufpr/lpoo/controllers/ManipularContaController.java
@@ -0,0 +1,81 @@
+package br.ufpr.lpoo.controllers;
+
+import br.ufpr.lpoo.models.Conta;
+import br.ufpr.lpoo.models.ContaCorrente;
+import br.ufpr.lpoo.models.connection.ContaDao;
+import br.ufpr.lpoo.models.connection.DaoFactory;
+import br.ufpr.lpoo.models.connection.DaoType;
+import br.ufpr.lpoo.utils.Observer;
+import br.ufpr.lpoo.views.ManipularConta;
+
+import java.beans.PropertyChangeEvent;
+
+import static br.ufpr.lpoo.models.connection.DaoType.MYSQL;
+
+public class ManipularContaController implements Observer {
+
+ private Conta conta;
+ private final ManipularConta view;
+ private static final DaoType type = MYSQL;
+
+ public ManipularContaController(ManipularConta view) {
+ this.view = view;
+ this.view.initUIComponents();
+ this.view.setController();
+ }
+
+ public void buscarConta(String cpf) throws Exception {
+ this.conta = DaoFactory.getContaDao(type).getByCliente(cpf);
+ if (conta == null) {
+ throw new IllegalArgumentException("Conta não encontrada");
+ }
+ this.view.loadConta(conta);
+ conta.addObserver(this);
+ }
+
+ public void realizaSaque(double valor) throws Exception {
+ if (conta.saca(valor)) {
+ ContaDao contaDao = DaoFactory.getContaDao(type);
+ contaDao.update(conta);
+ } else {
+ throw new IllegalArgumentException(conta.getClass() == ContaCorrente.class ? "Saldo/limite insuficiente" : "O valor restante é inferior ao montante mínimo");
+ }
+ }
+
+ public void realizaDeposito(double valor) throws Exception {
+ if (conta.deposita(valor)) {
+ ContaDao contaDao = DaoFactory.getContaDao(type);
+ contaDao.update(conta);
+ } else {
+ throw new IllegalArgumentException("Depósito mínimo não atingido");
+ }
+ }
+
+ public void realizaInvestimento(){
+ if (conta.getSaldo() > 0) {
+ conta.remunera();
+ try {
+ ContaDao contaDao = DaoFactory.getContaDao(type);
+ contaDao.update(conta);
+ } catch (Exception ex) {
+ throw new RuntimeException( "Erro ao realizar investimento");
+ }
+ } else {
+ throw new IllegalArgumentException( "Saldo insuficiente para investir");
+ }
+ }
+
+
+ /**
+ * Método que atualiza o saldo da conta
+ *
+ * @param evt Evento de mudança de propriedade
+ * @see Observer
+ */
+ @Override
+ public void propertyChange(PropertyChangeEvent evt) {
+ if (evt.getPropertyName().equals("saldo")) {
+ this.view.updateSaldo(this.conta.getSaldo());
+ }
+ }
+}
diff --git a/src/main/java/br/ufpr/lpoo/controllers/ManterClienteController.java b/src/main/java/br/ufpr/lpoo/controllers/ManterClienteController.java
new file mode 100644
index 0000000..0d2d40b
--- /dev/null
+++ b/src/main/java/br/ufpr/lpoo/controllers/ManterClienteController.java
@@ -0,0 +1,136 @@
+package br.ufpr.lpoo.controllers;
+
+import br.ufpr.lpoo.models.Cliente;
+import br.ufpr.lpoo.models.Endereco;
+import br.ufpr.lpoo.models.connection.*;
+import br.ufpr.lpoo.views.ManterCliente;
+import br.ufpr.lpoo.views.ManterClienteTableModel;
+
+import java.util.List;
+
+import static br.ufpr.lpoo.models.connection.DaoType.MYSQL;
+
+public class ManterClienteController {
+
+ private Cliente cliente;
+ private final ManterCliente view;
+ private final ManterClienteTableModel tabelaModel;
+ private static final DaoType type = MYSQL;
+
+ public ManterClienteController(ManterCliente view){
+ this.view = view;
+ this.tabelaModel = new ManterClienteTableModel(this.getClientes());
+ this.view.initUIComponents();
+ this.view.setController(this.tabelaModel);
+ }
+
+ /**
+ * Método que retorna a lista de clientes
+ * @return List
+ */
+ public List getClientes(){
+ try {
+ ClienteDao clienteDao = DaoFactory.getClienteDao(type);
+ return clienteDao.readAll();
+ } catch (Exception e){
+ System.out.println(e);
+ }
+ return null;
+ }
+
+ /**
+ * Método que retorna a lista de clientes filtrada pela query
+ * @param query Um trecho do nome, sobrenome, ou CPF inteiro
+ * @return List
+ */
+ public List getClientes(String query){
+ try {
+ ClienteDao clienteDao = DaoFactory.getClienteDao(type);
+ return clienteDao.search(query);
+ } catch (Exception e){
+ System.out.println(e);
+ }
+ return null;
+ }
+
+ public void buscarClientes(String query){
+
+ query = query.replaceAll("/[^a-zA-Z0-9]/g", "");
+
+ if (query.isEmpty()) {
+ this.tabelaModel.updateList(this.getClientes());
+ throw new RuntimeException("Insira um CPF ou um segmento de nome para buscar");
+ }
+
+ List clientes = this.getClientes(query);
+
+ if (clientes.isEmpty()) {
+ throw new RuntimeException("Nenhum cliente encontrado");
+ }
+
+ this.tabelaModel.updateList(clientes);
+ }
+
+ /**
+ * Método que cadastra um cliente na lista de clientes
+ * @param cliente
+ */
+ public void cadastrarCliente(Cliente cliente) throws Exception {
+ ClienteDao clienteDao = DaoFactory.getClienteDao(type);
+ clienteDao.create(cliente);
+
+ this.tabelaModel.updateList(this.getClientes());
+ }
+
+ public void updateCliente(Cliente cliente) throws Exception {
+
+ if (this.wasAddressEdited(cliente.getEndereco())) {
+ this.updateEndereco(cliente.getEndereco());
+ }
+
+ ClienteDao clienteDao = DaoFactory.getClienteDao(type);
+ clienteDao.update(cliente);
+
+ this.tabelaModel.updateList(this.getClientes());
+ }
+
+ public void updateEndereco(Endereco endereco) throws Exception {
+ EnderecoDao enderecoDao = DaoFactory.getEnderecoDao(type);
+ enderecoDao.update(endereco);
+ }
+
+ public void deleteCliente(String cpf) {
+ try {
+ ClienteDao clienteDao = DaoFactory.getClienteDao(type);
+ Cliente cliente = clienteDao.search(cpf).get(0);
+ if (cliente.getConta() != null) {
+ clienteDao.removeConta(cliente);
+ }
+ clienteDao.delete(cliente);
+ EnderecoDao enderecoDao = DaoFactory.getEnderecoDao(type);
+ enderecoDao.delete(cliente.getEndereco());
+ } catch (ArrayIndexOutOfBoundsException e){
+ throw new RuntimeException("Cliente não encontrado");
+ }
+ catch (Exception e) {
+ throw new RuntimeException(e.getMessage());
+ }
+ tabelaModel.updateList(this.getClientes());
+ this.view.clearForm();
+ }
+
+ public void selectCliente(int index){
+ if (index == -1) {
+ this.cliente = null;
+ this.view.clearForm();
+ }
+ else {
+ this.cliente = this.tabelaModel.getClientAt(index);
+ this.view.loadCliente(this.cliente);
+ }
+ }
+
+ public boolean wasAddressEdited(Endereco endereco) {
+ return !endereco.equals(cliente.getEndereco());
+ }
+}
diff --git a/src/main/java/br/ufpr/lpoo/controllers/Mensagens.java b/src/main/java/br/ufpr/lpoo/controllers/MensagensController.java
similarity index 57%
rename from src/main/java/br/ufpr/lpoo/controllers/Mensagens.java
rename to src/main/java/br/ufpr/lpoo/controllers/MensagensController.java
index c5e47e9..7bfabe5 100644
--- a/src/main/java/br/ufpr/lpoo/controllers/Mensagens.java
+++ b/src/main/java/br/ufpr/lpoo/controllers/MensagensController.java
@@ -1,14 +1,17 @@
package br.ufpr.lpoo.controllers;
-import javax.swing.*;
+import br.ufpr.lpoo.utils.Imagens;
+import br.ufpr.lpoo.views.dialog.ConfirmDialog;
+import br.ufpr.lpoo.views.dialog.MessageDialog;
+
import java.awt.*;
/**
* Classe que contém métodos para exibir mensagens de erro, aviso, sucesso e confirmação
- * Utiliza a classe JOptionPane para exibir as mensagens
- * @see JOptionPane
*/
-public class Mensagens {
+public class MensagensController {
+
+ private static boolean response;
/**
* Exibe uma mensagem de erro
@@ -16,7 +19,9 @@ public class Mensagens {
* @param mensagem A mensagem a ser exibida
*/
public static void erro(Component origin, String mensagem){
- JOptionPane.showMessageDialog(origin, mensagem, "Erro", JOptionPane.ERROR_MESSAGE, Imagens.ERRO.icon());
+ MessageDialog dialog = new MessageDialog();
+ dialog.initDialog(origin, mensagem, "Erro", Imagens.ERRO.icon());
+ dialog.open();
}
/**
@@ -25,7 +30,9 @@ public static void erro(Component origin, String mensagem){
* @param mensagem A mensagem a ser exibida
*/
public static void aviso(Component origin, String mensagem){
- JOptionPane.showMessageDialog(origin, mensagem, "Aviso", JOptionPane.WARNING_MESSAGE, Imagens.WARNING.icon());
+ MessageDialog dialog = new MessageDialog();
+ dialog.initDialog(origin, mensagem, "Aviso", Imagens.WARNING.icon());
+ dialog.open();
}
/**
@@ -34,7 +41,9 @@ public static void aviso(Component origin, String mensagem){
* @param mensagem A mensagem a ser exibida
*/
public static void sucesso(Component origin, String mensagem){
- JOptionPane.showMessageDialog(origin, mensagem, "Sucesso", JOptionPane.INFORMATION_MESSAGE, Imagens.SUCCESS.icon());
+ MessageDialog dialog = new MessageDialog();
+ dialog.initDialog(origin, mensagem, "Sucesso", Imagens.SUCCESS.icon());
+ dialog.open();
}
/**
@@ -43,7 +52,9 @@ public static void sucesso(Component origin, String mensagem){
* @param mensagem A mensagem a ser exibida
*/
public static void carregando(Component origin, String mensagem){
- JOptionPane.showMessageDialog(origin, mensagem, "Carregando", JOptionPane.INFORMATION_MESSAGE, Imagens.LOADING.icon());
+ MessageDialog dialog = new MessageDialog();
+ dialog.initDialog(origin, mensagem, "Carregando...", Imagens.LOADING.icon());
+ dialog.open();
}
/**
@@ -53,6 +64,13 @@ public static void carregando(Component origin, String mensagem){
* @return true se o usuário confirmar a ação, false caso contrário
*/
public static boolean confirmar(Component origin, String mensagem){
- return JOptionPane.showConfirmDialog(origin, mensagem, "Confirmação", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION;
+ ConfirmDialog dialog = new ConfirmDialog();
+ dialog.initDialog(origin, mensagem);
+ dialog.open();
+ return response;
+ }
+
+ public static void toogleResponse(boolean arg){
+ response = arg;
}
}
diff --git a/src/main/java/br/ufpr/lpoo/controllers/VincularClienteController.java b/src/main/java/br/ufpr/lpoo/controllers/VincularClienteController.java
new file mode 100644
index 0000000..ea8565b
--- /dev/null
+++ b/src/main/java/br/ufpr/lpoo/controllers/VincularClienteController.java
@@ -0,0 +1,98 @@
+package br.ufpr.lpoo.controllers;
+
+import br.ufpr.lpoo.models.Cliente;
+import br.ufpr.lpoo.models.connection.ClienteDao;
+import br.ufpr.lpoo.models.connection.DaoFactory;
+import br.ufpr.lpoo.models.connection.DaoType;
+import br.ufpr.lpoo.utils.FactoryConta;
+import br.ufpr.lpoo.views.VincularCliente;
+import br.ufpr.lpoo.views.VincularTableModel;
+
+import javax.swing.*;
+import java.util.ArrayList;
+import java.util.List;
+
+import static br.ufpr.lpoo.models.connection.DaoType.MYSQL;
+
+public class VincularClienteController {
+
+ private final VincularCliente view;
+ private final VincularTableModel tabelaModel;
+ private static final DaoType type = MYSQL;
+ private String tipoSelecionado;
+ private Cliente clienteSelecionado;
+
+ public VincularClienteController(VincularCliente view){
+ this.view = view;
+ this.tabelaModel = new VincularTableModel(this.getClientes());
+ this.view.initUIComponents();
+ this.view.setController(this.tabelaModel);
+ }
+
+ /**
+ * Método que retorna a lista de clientes
+ * @return List
+ */
+ public List getClientes(){
+ try {
+ ClienteDao clienteDao = DaoFactory.getClienteDao(type);
+ return clienteDao.readAll();
+ } catch (Exception e){
+ System.out.println(e);
+ }
+ return null;
+ }
+
+ public void abrirConta(ArrayList campos) throws Exception {
+ FactoryConta factory = new FactoryConta();
+ factory.abrirConta(this.tipoSelecionado, this.clienteSelecionado, campos);
+
+ this.tabelaModel.updateList(this.getClientes());
+ }
+
+ public void deleteConta() throws Exception {
+ ClienteDao clienteDao = DaoFactory.getClienteDao(type);
+ clienteDao.removeConta(this.clienteSelecionado);
+
+ this.tabelaModel.updateList(this.getClientes());
+ }
+
+ public Cliente getClienteSelecionado() {
+ return this.clienteSelecionado;
+ }
+
+ public void selectTipo(String tipo){
+ this.tipoSelecionado = tipo;
+ this.view.loadFormAbertura(tipo);
+ }
+
+ public void selectCliente(int index){
+ if (index == -1) return;
+ this.clienteSelecionado = this.tabelaModel.getClientAt(index);
+ this.view.switchForms(this.clienteSelecionado.getConta());
+ }
+
+ /**
+ * Valida se todos os campos necessários estão preenchidos corretamente e, se estiver, retorna um array com os valores dos campos.
+ *
+ * @param campos ArrayList de campos de texto a serem verificados.
+ * @return ArrayList com os valores dos campos.
+ * @throws NumberFormatException Se um dos campos não for um número válido.
+ * @throws IllegalArgumentException Se um dos campos estiver vazio.
+ */
+ public ArrayList validaCampos(ArrayList campos) {
+ ArrayList valores = new ArrayList<>();
+ for (JTextField campo : campos) {
+ if (!campo.isVisible()) continue;
+ if (campo.getText().isEmpty()) {
+ throw new IllegalArgumentException("Preencha todos os campos");
+ }
+ try {
+ valores.add(Double.parseDouble(campo.getText()));
+ } catch (NumberFormatException e) {
+ throw new NumberFormatException("Valor '" + campo.getText() + "' inválido");
+ }
+ }
+ return valores;
+ }
+}
diff --git a/src/main/java/br/ufpr/lpoo/models/Cliente.java b/src/main/java/br/ufpr/lpoo/models/Cliente.java
index 15d11c4..99ba77c 100644
--- a/src/main/java/br/ufpr/lpoo/models/Cliente.java
+++ b/src/main/java/br/ufpr/lpoo/models/Cliente.java
@@ -1,5 +1,7 @@
package br.ufpr.lpoo.models;
+import java.util.Objects;
+
/**
* Esta classe representa um cliente no sistema.
* Inclui informações como nome, sobrenome, endereço, CPF, RG e conta.
@@ -25,7 +27,7 @@ public class Cliente {
public Cliente(String nome, String sobrenome, Endereco endereco, String cpf, String rg) {
cpf = cpf.replaceAll("[^0-9]", "");
if (!validaCpf(cpf)) {
- throw new IllegalArgumentException("CPF inválido");
+ throw new IllegalArgumentException("CPF inválido: "+cpf);
}
setNome(nome);
setSobrenome(sobrenome);
@@ -140,4 +142,17 @@ private boolean validaCpf(String cpf) {
}
return false;
}
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ Cliente cliente = (Cliente) o;
+ return Objects.equals(cpf, cliente.cpf);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(cpf);
+ }
}
\ No newline at end of file
diff --git a/src/main/java/br/ufpr/lpoo/models/Conta.java b/src/main/java/br/ufpr/lpoo/models/Conta.java
index 0e343b9..6f15842 100644
--- a/src/main/java/br/ufpr/lpoo/models/Conta.java
+++ b/src/main/java/br/ufpr/lpoo/models/Conta.java
@@ -1,6 +1,6 @@
package br.ufpr.lpoo.models;
-import br.ufpr.lpoo.services.Observer;
+import br.ufpr.lpoo.utils.Observer;
import java.beans.PropertyChangeSupport;
@@ -10,7 +10,6 @@
* Implementa a interface ContaI.
*/
public abstract class Conta implements ContaI {
- private static int contador = 0;
protected int numero;
protected Cliente dono;
protected double saldo;
@@ -25,6 +24,9 @@ public abstract class Conta implements ContaI {
* @param saldo O saldo inicial da conta.
*/
public Conta(int numero, Cliente dono, double saldo) {
+ if (saldo < 0) {
+ throw new IllegalArgumentException("O saldo deve ser maior que 0.");
+ }
this.numero = numero;
this.dono = dono;
this.saldo = saldo;
@@ -39,9 +41,7 @@ public Conta(int numero, Cliente dono, double saldo) {
* @param saldo O saldo inicial da conta.
*/
public Conta(Cliente dono, double saldo) {
- this.numero = ++contador;
- this.dono = dono;
- this.saldo = saldo;
+ this(-1, dono, saldo);
}
/**
@@ -93,6 +93,10 @@ public int getNumero() {
return this.numero;
}
+ public void setNumero(int numero) {
+ this.numero = numero;
+ }
+
public double getSaldo() {
return this.saldo;
}
diff --git a/src/main/java/br/ufpr/lpoo/models/ContaCorrente.java b/src/main/java/br/ufpr/lpoo/models/ContaCorrente.java
index 9726d6c..2c30c9e 100644
--- a/src/main/java/br/ufpr/lpoo/models/ContaCorrente.java
+++ b/src/main/java/br/ufpr/lpoo/models/ContaCorrente.java
@@ -11,30 +11,27 @@ public class ContaCorrente extends Conta {
/**
* Construtor para a classe ContaCorrente.
* Define os valores iniciais para as variáveis de instância.
+ * O número da conta é incrementado automaticamente.
*
- * @param numero O número da conta.
* @param dono O proprietário da conta.
* @param saldo O saldo inicial da conta.
* @param limite O limite da conta.
*/
- public ContaCorrente(int numero, Cliente dono, double saldo, double limite) {
- super(numero, dono, saldo);
+ public ContaCorrente(Cliente dono, double saldo, double limite) {
+ super(dono, saldo);
+ if (limite < 0) {
+ throw new IllegalArgumentException("Limite deve ser maior ou igual a 0.");
+ }
this.depositoInicial = saldo;
this.limite = limite;
}
- /**
- * Construtor para a classe ContaCorrente.
- * Define os valores iniciais para as variáveis de instância.
- * O número da conta é incrementado automaticamente.
- *
- * @param dono O proprietário da conta.
- * @param saldo O saldo inicial da conta.
- * @param limite O limite da conta.
- */
- public ContaCorrente(Cliente dono, double saldo, double limite) {
+ public ContaCorrente(Cliente dono, double saldo, double limite, double depositoInicial) {
super(dono, saldo);
- this.depositoInicial = saldo;
+ if (limite < 0) {
+ throw new IllegalArgumentException("Limite deve ser maior ou igual a 0.");
+ }
+ this.depositoInicial = depositoInicial;
this.limite = limite;
}
diff --git a/src/main/java/br/ufpr/lpoo/models/ContaInvestimento.java b/src/main/java/br/ufpr/lpoo/models/ContaInvestimento.java
index 9ed7676..e444547 100644
--- a/src/main/java/br/ufpr/lpoo/models/ContaInvestimento.java
+++ b/src/main/java/br/ufpr/lpoo/models/ContaInvestimento.java
@@ -12,33 +12,41 @@ public class ContaInvestimento extends Conta {
/**
* Construtor para a classe ContaInvestimento.
* Define os valores iniciais para as variáveis de instância.
+ * O número da conta é incrementado automaticamente.
*
- * @param numero O número da conta.
* @param dono O proprietário da conta.
* @param saldo O saldo inicial da conta.
* @param depositoMinimo O depósito mínimo da conta.
* @param montanteMinimo O montante mínimo da conta.
*/
- public ContaInvestimento(int numero, Cliente dono, double saldo, double depositoMinimo, double montanteMinimo) {
- super(numero, dono, saldo);
+ public ContaInvestimento(Cliente dono, double saldo, double depositoMinimo, double montanteMinimo) {
+ super(dono, saldo);
+ if (depositoMinimo <= 0 || montanteMinimo <= 0) {
+ throw new IllegalArgumentException("Depósito mínimo e montante mínimo devem ser maiores que 0.");
+ }
+ if (saldo < depositoMinimo) {
+ throw new IllegalArgumentException("Saldo inicial menor que o depósito mínimo.");
+ }
+ if (saldo < montanteMinimo) {
+ throw new IllegalArgumentException("Saldo inicial menor que o montante mínimo.");
+ }
this.depositoInicial = saldo;
this.depositoMinimo = depositoMinimo;
this.montanteMinimo = montanteMinimo;
}
- /**
- * Construtor para a classe ContaInvestimento.
- * Define os valores iniciais para as variáveis de instância.
- * O número da conta é incrementado automaticamente.
- *
- * @param dono O proprietário da conta.
- * @param saldo O saldo inicial da conta.
- * @param depositoMinimo O depósito mínimo da conta.
- * @param montanteMinimo O montante mínimo da conta.
- */
- public ContaInvestimento(Cliente dono, double saldo, double depositoMinimo, double montanteMinimo) {
+ public ContaInvestimento(Cliente dono, double saldo, double depositoMinimo, double montanteMinimo, double depositoInicial) {
super(dono, saldo);
- this.depositoInicial = saldo;
+ if (depositoMinimo <= 0 || montanteMinimo <= 0) {
+ throw new IllegalArgumentException("Depósito mínimo e montante mínimo devem ser maiores que 0.");
+ }
+ if (saldo < depositoMinimo) {
+ throw new IllegalArgumentException("Saldo inicial menor que o depósito mínimo.");
+ }
+ if (saldo < montanteMinimo) {
+ throw new IllegalArgumentException("Saldo inicial menor que o montante mínimo.");
+ }
+ this.depositoInicial = depositoInicial;
this.depositoMinimo = depositoMinimo;
this.montanteMinimo = montanteMinimo;
}
diff --git a/src/main/java/br/ufpr/lpoo/models/Endereco.java b/src/main/java/br/ufpr/lpoo/models/Endereco.java
index 589dbe3..8cba13e 100644
--- a/src/main/java/br/ufpr/lpoo/models/Endereco.java
+++ b/src/main/java/br/ufpr/lpoo/models/Endereco.java
@@ -1,10 +1,13 @@
package br.ufpr.lpoo.models;
+import java.util.Objects;
+
/**
* Esta classe representa um Endereço no sistema.
* Inclui informações como logradouro, bairro, número e cidade.
*/
public class Endereco {
+ private int id;
public String logradouro;
public String bairro;
public int numero;
@@ -29,6 +32,19 @@ public Endereco(String logradouro, String bairro, String numeroS, String cidade)
this.cidade = cidade.toUpperCase();
}
+ public Endereco(int id, String logradouro, String bairro, String numeroS, String cidade) {
+ this(logradouro, bairro, numeroS, cidade);
+ this.id = id;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
public String getLogradouro() {
return logradouro;
}
@@ -60,4 +76,17 @@ private boolean isNumeroValido(int numero) {
return false;
}
}
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ Endereco endereco = (Endereco) o;
+ return id == endereco.id && numero == endereco.numero && Objects.equals(logradouro, endereco.logradouro) && Objects.equals(bairro, endereco.bairro) && Objects.equals(cidade, endereco.cidade);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(id, logradouro, bairro, numero, cidade);
+ }
}
\ No newline at end of file
diff --git a/src/main/java/br/ufpr/lpoo/models/connection/ClienteDao.java b/src/main/java/br/ufpr/lpoo/models/connection/ClienteDao.java
new file mode 100644
index 0000000..7852e6d
--- /dev/null
+++ b/src/main/java/br/ufpr/lpoo/models/connection/ClienteDao.java
@@ -0,0 +1,12 @@
+package br.ufpr.lpoo.models.connection;
+
+import br.ufpr.lpoo.models.Cliente;
+
+import java.util.List;
+
+public interface ClienteDao extends Dao{
+ Cliente getByCpf(String cpf);
+ List search(String query) throws Exception;
+ void addConta(Cliente cliente) throws Exception;
+ void removeConta(Cliente cliente) throws Exception;
+}
diff --git a/src/main/java/br/ufpr/lpoo/models/connection/ConnectionFactory.java b/src/main/java/br/ufpr/lpoo/models/connection/ConnectionFactory.java
new file mode 100644
index 0000000..42e0cbc
--- /dev/null
+++ b/src/main/java/br/ufpr/lpoo/models/connection/ConnectionFactory.java
@@ -0,0 +1,29 @@
+package br.ufpr.lpoo.models.connection;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+import java.util.Properties;
+
+public class ConnectionFactory {
+ private static Properties properties;
+
+ private ConnectionFactory() {
+ }
+
+ public static Connection getConnection() throws SQLException {
+ readProperties();
+ return DriverManager.getConnection(properties.getProperty("mysql.database.url"),
+ properties.getProperty("mysql.database.username"),
+ properties.getProperty("mysql.database.password"));
+ }
+
+ public static void readProperties() {
+ if (properties == null) {
+ properties = new Properties();
+ properties.put("mysql.database.url", System.getenv("mysql_database_url"));
+ properties.put("mysql.database.username", System.getenv("mysql_database_username"));
+ properties.put("mysql.database.password", System.getenv("mysql_database_password"));
+ }
+ }
+}
diff --git a/src/main/java/br/ufpr/lpoo/models/connection/ContaCorrenteDao.java b/src/main/java/br/ufpr/lpoo/models/connection/ContaCorrenteDao.java
new file mode 100644
index 0000000..6187328
--- /dev/null
+++ b/src/main/java/br/ufpr/lpoo/models/connection/ContaCorrenteDao.java
@@ -0,0 +1,4 @@
+package br.ufpr.lpoo.models.connection;
+
+public interface ContaCorrenteDao extends ContaDao{
+}
diff --git a/src/main/java/br/ufpr/lpoo/models/connection/ContaDao.java b/src/main/java/br/ufpr/lpoo/models/connection/ContaDao.java
new file mode 100644
index 0000000..6316124
--- /dev/null
+++ b/src/main/java/br/ufpr/lpoo/models/connection/ContaDao.java
@@ -0,0 +1,8 @@
+package br.ufpr.lpoo.models.connection;
+
+import br.ufpr.lpoo.models.Conta;
+
+public interface ContaDao extends Dao {
+ Conta getByNumero(String numero);
+ Conta getByCliente(String cpfCliente);
+}
\ No newline at end of file
diff --git a/src/main/java/br/ufpr/lpoo/models/connection/ContaInvestimentoDao.java b/src/main/java/br/ufpr/lpoo/models/connection/ContaInvestimentoDao.java
new file mode 100644
index 0000000..fc1db0d
--- /dev/null
+++ b/src/main/java/br/ufpr/lpoo/models/connection/ContaInvestimentoDao.java
@@ -0,0 +1,4 @@
+package br.ufpr.lpoo.models.connection;
+
+public interface ContaInvestimentoDao extends ContaDao{
+}
diff --git a/src/main/java/br/ufpr/lpoo/models/connection/Dao.java b/src/main/java/br/ufpr/lpoo/models/connection/Dao.java
new file mode 100644
index 0000000..29c9eda
--- /dev/null
+++ b/src/main/java/br/ufpr/lpoo/models/connection/Dao.java
@@ -0,0 +1,10 @@
+package br.ufpr.lpoo.models.connection;
+
+import java.util.List;
+
+public interface Dao {
+ void create(T object) throws Exception;
+ void update(T object) throws Exception;
+ void delete(T object) throws Exception;
+ List readAll() throws Exception;
+}
diff --git a/src/main/java/br/ufpr/lpoo/models/connection/DaoFactory.java b/src/main/java/br/ufpr/lpoo/models/connection/DaoFactory.java
new file mode 100644
index 0000000..4528c81
--- /dev/null
+++ b/src/main/java/br/ufpr/lpoo/models/connection/DaoFactory.java
@@ -0,0 +1,34 @@
+package br.ufpr.lpoo.models.connection;
+
+import br.ufpr.lpoo.models.connection.mysql.*;
+
+import javax.naming.OperationNotSupportedException;
+
+public class DaoFactory {
+
+ private DaoFactory(){}
+
+ public static ClienteDao getClienteDao(DaoType type) throws OperationNotSupportedException {
+ return switch (type) {
+ case MYSQL -> new ClienteDaoMysql();
+ case POSTGRES -> throw new OperationNotSupportedException("Postgres not implemented");
+ case IN_MEMORY -> throw new OperationNotSupportedException("In memory not implemented");
+ };
+ }
+
+ public static EnderecoDao getEnderecoDao(DaoType type) throws OperationNotSupportedException {
+ return switch (type) {
+ case MYSQL -> new EnderecoDaoMysql();
+ case POSTGRES -> throw new OperationNotSupportedException("Postgres not implemented");
+ case IN_MEMORY -> throw new OperationNotSupportedException("In memory not implemented");
+ };
+ }
+
+ public static ContaDao getContaDao(DaoType type) throws OperationNotSupportedException {
+ return switch (type) {
+ case MYSQL -> new ContaDaoMysql();
+ case POSTGRES -> throw new OperationNotSupportedException("Postgres not implemented");
+ case IN_MEMORY -> throw new OperationNotSupportedException("In memory not implemented");
+ };
+ }
+}
diff --git a/src/main/java/br/ufpr/lpoo/models/connection/DaoType.java b/src/main/java/br/ufpr/lpoo/models/connection/DaoType.java
new file mode 100644
index 0000000..ea4919c
--- /dev/null
+++ b/src/main/java/br/ufpr/lpoo/models/connection/DaoType.java
@@ -0,0 +1,7 @@
+package br.ufpr.lpoo.models.connection;
+
+public enum DaoType {
+ MYSQL,
+ POSTGRES,
+ IN_MEMORY
+}
diff --git a/src/main/java/br/ufpr/lpoo/models/connection/EnderecoDao.java b/src/main/java/br/ufpr/lpoo/models/connection/EnderecoDao.java
new file mode 100644
index 0000000..52d4a27
--- /dev/null
+++ b/src/main/java/br/ufpr/lpoo/models/connection/EnderecoDao.java
@@ -0,0 +1,7 @@
+package br.ufpr.lpoo.models.connection;
+
+import br.ufpr.lpoo.models.Endereco;
+
+public interface EnderecoDao extends Dao{
+ Endereco getByClientId(int id);
+}
diff --git a/src/main/java/br/ufpr/lpoo/models/connection/mysql/ClienteDaoMysql.java b/src/main/java/br/ufpr/lpoo/models/connection/mysql/ClienteDaoMysql.java
new file mode 100644
index 0000000..ce81eb9
--- /dev/null
+++ b/src/main/java/br/ufpr/lpoo/models/connection/mysql/ClienteDaoMysql.java
@@ -0,0 +1,158 @@
+package br.ufpr.lpoo.models.connection.mysql;
+
+import br.ufpr.lpoo.models.Cliente;
+import br.ufpr.lpoo.models.Conta;
+import br.ufpr.lpoo.models.Endereco;
+import br.ufpr.lpoo.models.connection.ClienteDao;
+import br.ufpr.lpoo.models.connection.ConnectionFactory;
+
+import java.sql.*;
+import java.util.ArrayList;
+import java.util.List;
+
+public class ClienteDaoMysql implements ClienteDao {
+
+ @Override
+ public Cliente getByCpf(String cpf) {
+ try (Connection con = ConnectionFactory.getConnection();
+ PreparedStatement sql = con.prepareStatement("SELECT * FROM cliente JOIN endereco ON endereco.id = cliente.idEndereco WHERE cpf = ?;")) {
+ sql.setString(1, cpf);
+ ResultSet list = sql.executeQuery();
+ if (list.next()) {
+ Endereco e = new Endereco(list.getString("logradouro"), list.getString("bairro"), list.getString("numero"), list.getString("cidade"));
+ return new Cliente(list.getString("nome"), list.getString("sobrenome"), e, list.getString("cpf"), list.getString("rg"));
+ }
+ list.close();
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ }
+ return null;
+ }
+
+ @Override
+ public List search(String query) throws Exception {
+ List clientes = new ArrayList<>();
+ try (Connection con = ConnectionFactory.getConnection();
+ PreparedStatement sql = con.prepareStatement("SELECT * FROM cliente JOIN endereco ON endereco.id = cliente.idEndereco WHERE cpf = ? OR nome LIKE '%" + query + "%' OR sobrenome LIKE '%" + query + "%';")) {
+ sql.setString(1, query);
+ ResultSet list = sql.executeQuery();
+ while (list.next()) {
+ Endereco e = new Endereco(list.getInt("idEndereco"), list.getString("logradouro"), list.getString("bairro"), list.getString("numero"), list.getString("cidade"));
+ Cliente c = new Cliente(list.getString("nome"), list.getString("sobrenome"), e, list.getString("cpf"), list.getString("rg"));
+ if (list.getString("numeroConta") != null) {
+ Conta conta = new ContaDaoMysql().getByNumero(list.getString("numeroConta"));
+ if (conta != null) {
+ c.setConta(conta);
+ }
+ }
+ clientes.add(c);
+ }
+ list.close();
+ }
+ return clientes;
+ }
+
+ @Override
+ public void addConta(Cliente cliente) throws Exception {
+ try (Connection con = ConnectionFactory.getConnection();
+ PreparedStatement sql = con.prepareStatement("UPDATE cliente SET numeroConta = ? WHERE cpf = ?")) {
+ sql.setInt(1, cliente.getConta().getNumero());
+ sql.setString(2, cliente.getCpf());
+ sql.executeUpdate();
+ }
+ }
+
+ @Override
+ public void removeConta(Cliente cliente) throws Exception {
+ try (Connection con = ConnectionFactory.getConnection()) {
+ con.setAutoCommit(false);
+ try (PreparedStatement sql = con.prepareStatement("UPDATE cliente SET numeroConta = NULL WHERE cpf = ?")) {
+ sql.setString(1, cliente.getCpf());
+ sql.executeUpdate();
+ }
+ con.commit();
+
+ switch (cliente.getConta().getClass().getSimpleName()) {
+ case "ContaCorrente" -> new ContaCorrenteDaoMysql().delete(cliente.getConta());
+ case "ContaInvestimento" -> new ContaInvestimentoDaoMysql().delete(cliente.getConta());
+ }
+
+ cliente.setConta(null);
+ }
+ }
+
+ @Override
+ public void create(Cliente cliente) throws Exception {
+ try (Connection con = ConnectionFactory.getConnection()) {
+ con.setAutoCommit(false);
+
+ try (PreparedStatement sql = con.prepareStatement("INSERT INTO endereco (logradouro, bairro, numero, cidade) VALUES (?,?,?,?);", Statement.RETURN_GENERATED_KEYS)) {
+ sql.setString(1, cliente.getEndereco().getLogradouro());
+ sql.setString(2, cliente.getEndereco().getBairro());
+ sql.setInt(3, cliente.getEndereco().getNumero());
+ sql.setString(4, cliente.getEndereco().getCidade());
+ sql.executeUpdate();
+ ResultSet rs = sql.getGeneratedKeys();
+ if (rs.next()) {
+ cliente.getEndereco().setId(rs.getInt(1));
+ } else {
+ throw new RuntimeException("Erro na criação de endereço");
+ }
+ }
+
+ try (PreparedStatement sql = con.prepareStatement("INSERT INTO cliente (cpf, nome, sobrenome, rg, idEndereco) VALUES (?,?,?,?,?);");) {
+ sql.setString(1, cliente.getCpf());
+ sql.setString(2, cliente.getNome());
+ sql.setString(3, cliente.getSobrenome());
+ sql.setString(4, cliente.getRg());
+ sql.setInt(5, cliente.getEndereco().getId());
+ sql.executeUpdate();
+ }
+
+ con.commit();
+ }
+ }
+
+ @Override
+ public void update(Cliente cliente) throws Exception {
+ try (Connection con = ConnectionFactory.getConnection();
+ PreparedStatement sql = con.prepareStatement("UPDATE cliente SET nome = ?, sobrenome = ?, rg = ? WHERE cpf = ?")) {
+ sql.setString(1, cliente.getNome());
+ sql.setString(2, cliente.getSobrenome());
+ sql.setString(3, cliente.getRg());
+ sql.setString(4, cliente.getCpf());
+ sql.executeUpdate();
+ }
+ }
+
+ @Override
+ public void delete(Cliente cliente) throws Exception {
+ try (Connection con = ConnectionFactory.getConnection();
+ PreparedStatement sql = con.prepareStatement("DELETE FROM cliente WHERE cpf = ?")) {
+ sql.setString(1, cliente.getCpf());
+ sql.executeUpdate();
+ }
+ }
+
+ @Override
+ public List readAll() throws Exception {
+ List clientes = new ArrayList<>();
+ try (Connection con = ConnectionFactory.getConnection();
+ PreparedStatement sql = con.prepareStatement("SELECT * FROM cliente JOIN endereco ON endereco.id = cliente.idEndereco;")) {
+ ResultSet list = sql.executeQuery();
+ while (list.next()) {
+ Endereco e = new Endereco(list.getInt("idEndereco"), list.getString("logradouro"), list.getString("bairro"), list.getString("numero"), list.getString("cidade"));
+ Cliente c = new Cliente(list.getString("nome"), list.getString("sobrenome"), e, list.getString("cpf"), list.getString("rg"));
+ if (list.getString("numeroConta") != null) {
+ Conta conta = new ContaDaoMysql().getByNumero(list.getString("numeroConta"));
+ if (conta != null) {
+ c.setConta(conta);
+ }
+ }
+ clientes.add(c);
+ }
+ list.close();
+ }
+ return clientes;
+ }
+}
diff --git a/src/main/java/br/ufpr/lpoo/models/connection/mysql/ContaCorrenteDaoMysql.java b/src/main/java/br/ufpr/lpoo/models/connection/mysql/ContaCorrenteDaoMysql.java
new file mode 100644
index 0000000..05cce22
--- /dev/null
+++ b/src/main/java/br/ufpr/lpoo/models/connection/mysql/ContaCorrenteDaoMysql.java
@@ -0,0 +1,143 @@
+package br.ufpr.lpoo.models.connection.mysql;
+
+import br.ufpr.lpoo.models.Cliente;
+import br.ufpr.lpoo.models.Conta;
+import br.ufpr.lpoo.models.ContaCorrente;
+import br.ufpr.lpoo.models.connection.ConnectionFactory;
+import br.ufpr.lpoo.models.connection.ContaCorrenteDao;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.util.ArrayList;
+import java.util.List;
+
+public class ContaCorrenteDaoMysql implements ContaCorrenteDao {
+
+ @Override
+ public Conta getByNumero(String numero) {
+ try(Connection con = ConnectionFactory.getConnection();
+ PreparedStatement sql = con.prepareStatement("SELECT * FROM conta INNER JOIN contacorrente ON conta.numero = contacorrente.numeroConta WHERE conta.numero = ?;")){
+ sql.setInt(1, Integer.parseInt(numero));
+ ResultSet rs = sql.executeQuery();
+ if(rs.next()){
+ Cliente dono = new ClienteDaoMysql().getByCpf(rs.getString("cpfCliente"));
+ ContaCorrente conta = new ContaCorrente(dono, rs.getDouble("saldo"), rs.getDouble("limite"), rs.getDouble("depositoInicial"));
+ conta.setNumero(rs.getInt("numero"));
+ return conta;
+ }
+ rs.close();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ return null;
+ }
+
+ @Override
+ public Conta getByCliente(String cpfCliente) {
+ try(Connection con = ConnectionFactory.getConnection();
+ PreparedStatement sql = con.prepareStatement("SELECT * FROM conta INNER JOIN contacorrente ON conta.numero = contacorrente.numeroConta WHERE conta.cpfCliente = ?;")){
+ sql.setString(1, cpfCliente);
+ ResultSet rs = sql.executeQuery();
+ if(rs.next()){
+ Cliente dono = new ClienteDaoMysql().getByCpf(rs.getString("cpfCliente"));
+ ContaCorrente conta = new ContaCorrente(dono, rs.getDouble("saldo"), rs.getDouble("limite"), rs.getDouble("depositoInicial"));
+ conta.setNumero(rs.getInt("numero"));
+ return conta;
+ }
+ rs.close();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ return null;
+ }
+
+
+ @Override
+ public void create(Conta conta) throws Exception {
+ try(Connection con = ConnectionFactory.getConnection()) {
+ con.setAutoCommit(false);
+
+ try(PreparedStatement sql = con.prepareStatement("INSERT INTO conta (cpfCliente, saldo) VALUES (?, ?);", PreparedStatement.RETURN_GENERATED_KEYS)){
+ sql.setString(1, conta.getDono().getCpf());
+ sql.setDouble(2, conta.getSaldo());
+ sql.executeUpdate();
+ ResultSet rs = sql.getGeneratedKeys();
+ rs.next();
+ conta.setNumero(rs.getInt(1));
+ }
+ try(PreparedStatement sql = con.prepareStatement("INSERT INTO contacorrente (numeroConta, depositoInicial, limite) VALUES (?, ?, ?);")){
+ sql.setInt(1, conta.getNumero());
+ ContaCorrente contaCorrente = (ContaCorrente) conta;
+ sql.setDouble(2, contaCorrente.getDepositoInicial());
+ sql.setDouble(3, contaCorrente.getLimite());
+ sql.executeUpdate();
+ }
+
+ con.commit();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public void update(Conta conta) throws Exception {
+ try(Connection con = ConnectionFactory.getConnection()){
+ con.setAutoCommit(false);
+
+ try(PreparedStatement sql = con.prepareStatement("UPDATE conta SET saldo = ? WHERE numero = ?;")){
+ sql.setDouble(1, conta.getSaldo());
+ sql.setInt(2, conta.getNumero());
+ sql.executeUpdate();
+ }
+ try(PreparedStatement sql = con.prepareStatement("UPDATE contacorrente SET limite = ? WHERE numeroConta = ?;")){
+ sql.setDouble(1, ((ContaCorrente) conta).getLimite());
+ sql.setInt(2, conta.getNumero());
+ sql.executeUpdate();
+ }
+
+ con.commit();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public void delete(Conta conta) throws Exception {
+ try(Connection con = ConnectionFactory.getConnection()){
+ con.setAutoCommit(false);
+
+ try(PreparedStatement sql = con.prepareStatement("DELETE FROM contacorrente WHERE numeroConta = ?;")){
+ sql.setInt(1, conta.getNumero());
+ sql.executeUpdate();
+ }
+ try(PreparedStatement sql = con.prepareStatement("DELETE FROM conta WHERE numero = ?;")){
+ sql.setInt(1, conta.getNumero());
+ sql.executeUpdate();
+ }
+
+ con.commit();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public List readAll() throws Exception {
+ List contas = new ArrayList<>();
+ try(Connection con = ConnectionFactory.getConnection();
+ PreparedStatement sql = con.prepareStatement("SELECT * FROM conta INNER JOIN contacorrente ON conta.numero = contacorrente.numeroConta;")){
+ ResultSet rs = sql.executeQuery();
+ while(rs.next()){
+ Cliente dono = new ClienteDaoMysql().getByCpf(rs.getString("cpfCliente"));
+ ContaCorrente conta = new ContaCorrente(dono, rs.getDouble("saldo"), rs.getDouble("limite"), rs.getDouble("depositoInicial"));
+ conta.setNumero(rs.getInt("numero"));
+ contas.add(conta);
+ }
+ rs.close();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ return contas;
+ }
+}
diff --git a/src/main/java/br/ufpr/lpoo/models/connection/mysql/ContaDaoMysql.java b/src/main/java/br/ufpr/lpoo/models/connection/mysql/ContaDaoMysql.java
new file mode 100644
index 0000000..7fdb470
--- /dev/null
+++ b/src/main/java/br/ufpr/lpoo/models/connection/mysql/ContaDaoMysql.java
@@ -0,0 +1,75 @@
+package br.ufpr.lpoo.models.connection.mysql;
+
+import br.ufpr.lpoo.models.Conta;
+import br.ufpr.lpoo.models.connection.ContaDao;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ContaDaoMysql implements ContaDao {
+ @Override
+ public Conta getByNumero(String numero) {
+ Conta conta;
+ try {
+ ContaCorrenteDaoMysql contaCorrenteDaoMysql = new ContaCorrenteDaoMysql();
+ conta = contaCorrenteDaoMysql.getByNumero(numero);
+ if (conta == null) {
+ ContaInvestimentoDaoMysql contaInvestimentoDaoMysql = new ContaInvestimentoDaoMysql();
+ conta = contaInvestimentoDaoMysql.getByNumero(numero);
+ }
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ return conta;
+ }
+
+ @Override
+ public Conta getByCliente(String cpfCliente) {
+ Conta conta;
+ try {
+ ContaCorrenteDaoMysql contaCorrenteDaoMysql = new ContaCorrenteDaoMysql();
+ conta = contaCorrenteDaoMysql.getByCliente(cpfCliente);
+ if (conta == null) {
+ ContaInvestimentoDaoMysql contaInvestimentoDaoMysql = new ContaInvestimentoDaoMysql();
+ conta = contaInvestimentoDaoMysql.getByCliente(cpfCliente);
+ }
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ return conta;
+ }
+
+ @Override
+ public void create(Conta object) throws Exception {
+ switch (object.getClass().getSimpleName()) {
+ case "ContaCorrente" -> new ContaCorrenteDaoMysql().create(object);
+ case "ContaInvestimento" -> new ContaInvestimentoDaoMysql().create(object);
+ }
+ }
+
+ @Override
+ public void update(Conta conta) throws Exception {
+ switch (conta.getClass().getSimpleName()) {
+ case "ContaCorrente" -> new ContaCorrenteDaoMysql().update(conta);
+ case "ContaInvestimento" -> new ContaInvestimentoDaoMysql().update(conta);
+ }
+ }
+
+ @Override
+ public void delete(Conta conta) throws Exception {
+ switch (conta.getClass().getSimpleName()) {
+ case "ContaCorrente" -> new ContaCorrenteDaoMysql().delete(conta);
+ case "ContaInvestimento" -> new ContaInvestimentoDaoMysql().delete(conta);
+ }
+ }
+
+ @Override
+ public List readAll() throws Exception {
+ List contas = new ArrayList<>();
+ ContaCorrenteDaoMysql contaCorrenteDaoMysql = new ContaCorrenteDaoMysql();
+ ContaInvestimentoDaoMysql contaInvestimentoDaoMysql = new ContaInvestimentoDaoMysql();
+ contas.addAll(contaCorrenteDaoMysql.readAll());
+ contas.addAll(contaInvestimentoDaoMysql.readAll());
+ return contas;
+ }
+}
diff --git a/src/main/java/br/ufpr/lpoo/models/connection/mysql/ContaInvestimentoDaoMysql.java b/src/main/java/br/ufpr/lpoo/models/connection/mysql/ContaInvestimentoDaoMysql.java
new file mode 100644
index 0000000..1cddea8
--- /dev/null
+++ b/src/main/java/br/ufpr/lpoo/models/connection/mysql/ContaInvestimentoDaoMysql.java
@@ -0,0 +1,146 @@
+package br.ufpr.lpoo.models.connection.mysql;
+
+import br.ufpr.lpoo.models.Cliente;
+import br.ufpr.lpoo.models.Conta;
+import br.ufpr.lpoo.models.ContaCorrente;
+import br.ufpr.lpoo.models.ContaInvestimento;
+import br.ufpr.lpoo.models.connection.ConnectionFactory;
+import br.ufpr.lpoo.models.connection.ContaInvestimentoDao;
+
+import java.awt.*;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.util.ArrayList;
+import java.util.List;
+
+public class ContaInvestimentoDaoMysql implements ContaInvestimentoDao {
+ @Override
+ public Conta getByNumero(String numero) {
+ try(Connection con = ConnectionFactory.getConnection();
+ PreparedStatement sql = con.prepareStatement("SELECT * FROM conta INNER JOIN containvestimento ON conta.numero = containvestimento.numeroConta WHERE conta.numero = ?;")){
+ sql.setInt(1, Integer.parseInt(numero));
+ ResultSet rs = sql.executeQuery();
+ if(rs.next()){
+ Cliente dono = new ClienteDaoMysql().getByCpf(rs.getString("cpfCliente"));
+ ContaInvestimento conta = new ContaInvestimento(dono, rs.getDouble("saldo"), rs.getDouble("depositoMinimo"), rs.getDouble("montanteMinimo"), rs.getDouble("depositoInicial"));
+ conta.setNumero(rs.getInt("numero"));
+ return conta;
+ }
+ rs.close();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ return null;
+ }
+
+ @Override
+ public Conta getByCliente(String cpfCliente) {
+ try(Connection con = ConnectionFactory.getConnection();
+ PreparedStatement sql = con.prepareStatement("SELECT * FROM conta INNER JOIN containvestimento ON conta.numero = containvestimento.numeroConta WHERE conta.cpfCliente = ?;")){
+ sql.setString(1, cpfCliente);
+ ResultSet rs = sql.executeQuery();
+ if(rs.next()){
+ Cliente dono = new ClienteDaoMysql().getByCpf(rs.getString("cpfCliente"));
+ ContaInvestimento conta = new ContaInvestimento(dono, rs.getDouble("saldo"), rs.getDouble("depositoMinimo"), rs.getDouble("montanteMinimo"), rs.getDouble("depositoInicial"));
+ conta.setNumero(rs.getInt("numero"));
+ return conta;
+ }
+ rs.close();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ return null;
+ }
+
+
+ @Override
+ public void create(Conta conta) throws Exception {
+ try(Connection con = ConnectionFactory.getConnection()) {
+ con.setAutoCommit(false);
+
+ try(PreparedStatement sql = con.prepareStatement("INSERT INTO conta (cpfCliente, saldo) VALUES (?, ?);", PreparedStatement.RETURN_GENERATED_KEYS)){
+ sql.setString(1, conta.getDono().getCpf());
+ sql.setDouble(2, conta.getSaldo());
+ sql.executeUpdate();
+ ResultSet rs = sql.getGeneratedKeys();
+ rs.next();
+ conta.setNumero(rs.getInt(1));
+ }
+ try(PreparedStatement sql = con.prepareStatement("INSERT INTO containvestimento (numeroConta, depositoInicial, depositoMinimo, montanteMinimo) VALUES (?, ?, ?, ?);")){
+ sql.setInt(1, conta.getNumero());
+ ContaInvestimento contaInvestimento = (ContaInvestimento) conta;
+ sql.setDouble(2, contaInvestimento.getDepositoInicial());
+ sql.setDouble(3, contaInvestimento.getDepositoMinimo());
+ sql.setDouble(4, contaInvestimento.getMontanteMinimo());
+ sql.executeUpdate();
+ }
+
+ con.commit();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public void update(Conta conta) throws Exception {
+ try(Connection con = ConnectionFactory.getConnection()){
+ con.setAutoCommit(false);
+
+ try(PreparedStatement sql = con.prepareStatement("UPDATE conta SET saldo = ? WHERE numero = ?;")){
+ sql.setDouble(1, conta.getSaldo());
+ sql.setInt(2, conta.getNumero());
+ sql.executeUpdate();
+ }
+ try(PreparedStatement sql = con.prepareStatement("UPDATE containvestimento SET depositoMinimo = ?, montanteMinimo = ? WHERE numeroConta = ?;")){
+ sql.setDouble(1, ((ContaInvestimento) conta).getDepositoMinimo());
+ sql.setDouble(2, ((ContaInvestimento) conta).getMontanteMinimo());
+ sql.setInt(3, conta.getNumero());
+ sql.executeUpdate();
+ }
+
+ con.commit();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public void delete(Conta conta) throws Exception {
+ try(Connection con = ConnectionFactory.getConnection()){
+ con.setAutoCommit(false);
+
+ try(PreparedStatement sql = con.prepareStatement("DELETE FROM containvestimento WHERE numeroConta = ?;")){
+ sql.setInt(1, conta.getNumero());
+ sql.executeUpdate();
+ }
+ try(PreparedStatement sql = con.prepareStatement("DELETE FROM conta WHERE numero = ?;")){
+ sql.setInt(1, conta.getNumero());
+ sql.executeUpdate();
+ }
+
+ con.commit();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public List readAll() throws Exception {
+ List contas = new ArrayList<>();
+ try(Connection con = ConnectionFactory.getConnection();
+ PreparedStatement sql = con.prepareStatement("SELECT * FROM conta INNER JOIN containvestimento ON conta.numero = containvestimento.numeroConta;")){
+ ResultSet rs = sql.executeQuery();
+ while(rs.next()){
+ Cliente dono = new ClienteDaoMysql().getByCpf(rs.getString("cpfCliente"));
+ ContaInvestimento conta = new ContaInvestimento(dono, rs.getDouble("saldo"), rs.getDouble("depositoMinimo"), rs.getDouble("montanteMinimo"), rs.getDouble("depositoInicial"));
+ conta.setNumero(rs.getInt("numero"));
+ contas.add(conta);
+ }
+ rs.close();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ return contas;
+ }
+}
diff --git a/src/main/java/br/ufpr/lpoo/models/connection/mysql/EnderecoDaoMysql.java b/src/main/java/br/ufpr/lpoo/models/connection/mysql/EnderecoDaoMysql.java
new file mode 100644
index 0000000..6fc7fc7
--- /dev/null
+++ b/src/main/java/br/ufpr/lpoo/models/connection/mysql/EnderecoDaoMysql.java
@@ -0,0 +1,56 @@
+package br.ufpr.lpoo.models.connection.mysql;
+
+import br.ufpr.lpoo.models.Endereco;
+import br.ufpr.lpoo.models.connection.ConnectionFactory;
+import br.ufpr.lpoo.models.connection.EnderecoDao;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.util.List;
+
+public class EnderecoDaoMysql implements EnderecoDao {
+ @Override
+ public void create(Endereco endereco) throws Exception {
+ throw new UnsupportedOperationException("Implementado no create to Cliente");
+ }
+
+ @Override
+ public void update(Endereco endereco) throws Exception {
+ try(Connection con = ConnectionFactory.getConnection();
+ PreparedStatement sql = con.prepareStatement("UPDATE endereco SET logradouro = ?, bairro = ?, numero = ?, cidade = ? WHERE id = ?;")) {
+ con.setAutoCommit(false);
+ sql.setString(1, endereco.getLogradouro());
+ sql.setString(2, endereco.getBairro());
+ sql.setInt(3, endereco.getNumero());
+ sql.setString(4, endereco.getCidade());
+ sql.setInt(5, endereco.getId());
+ sql.executeUpdate();
+ con.commit();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public void delete(Endereco endereco) throws Exception {
+ try(Connection con = ConnectionFactory.getConnection();
+ PreparedStatement sql = con.prepareStatement("DELETE FROM endereco WHERE id = ?;")) {
+ con.setAutoCommit(false);
+ sql.setInt(1, endereco.getId());
+ sql.executeUpdate();
+ con.commit();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public List readAll() throws Exception {
+ throw new UnsupportedOperationException("Not implemented");
+ }
+
+ @Override
+ public Endereco getByClientId(int id) {
+ throw new UnsupportedOperationException("Not implemented");
+ }
+}
diff --git a/src/main/java/br/ufpr/lpoo/services/FactoryConta.java b/src/main/java/br/ufpr/lpoo/utils/FactoryConta.java
similarity index 61%
rename from src/main/java/br/ufpr/lpoo/services/FactoryConta.java
rename to src/main/java/br/ufpr/lpoo/utils/FactoryConta.java
index 12a0144..18fdee9 100644
--- a/src/main/java/br/ufpr/lpoo/services/FactoryConta.java
+++ b/src/main/java/br/ufpr/lpoo/utils/FactoryConta.java
@@ -1,23 +1,29 @@
-package br.ufpr.lpoo.services;
+package br.ufpr.lpoo.utils;
-import br.ufpr.lpoo.controllers.Sistema;
import br.ufpr.lpoo.models.Cliente;
import br.ufpr.lpoo.models.Conta;
import br.ufpr.lpoo.models.ContaCorrente;
import br.ufpr.lpoo.models.ContaInvestimento;
+import br.ufpr.lpoo.models.connection.*;
import java.util.ArrayList;
+import static br.ufpr.lpoo.models.connection.DaoType.MYSQL;
+
public class FactoryConta {
Conta conta;
+ private static final DaoType type = MYSQL;
- public void abrirConta(String tipo, Cliente dono, ArrayList valoresIniciais){
+ public void abrirConta(String tipo, Cliente dono, ArrayList valoresIniciais) throws Exception {
if(tipo.equals("Conta Corrente")){
conta = new ContaCorrente(dono, valoresIniciais.get(0), valoresIniciais.get(1));
} else if(tipo.equals("Conta Investimento")){
conta = new ContaInvestimento(dono, valoresIniciais.get(0), valoresIniciais.get(1), valoresIniciais.get(2));
}
+ ContaDao contaDao = DaoFactory.getContaDao(type);
+ contaDao.create(conta);
dono.setConta(this.conta);
- Sistema.cadastrarConta(this.conta);
+ ClienteDao clienteDao = DaoFactory.getClienteDao(type);
+ clienteDao.addConta(dono);
}
}
diff --git a/src/main/java/br/ufpr/lpoo/controllers/Imagens.java b/src/main/java/br/ufpr/lpoo/utils/Imagens.java
similarity index 99%
rename from src/main/java/br/ufpr/lpoo/controllers/Imagens.java
rename to src/main/java/br/ufpr/lpoo/utils/Imagens.java
index 81f2886..c688e8f 100644
--- a/src/main/java/br/ufpr/lpoo/controllers/Imagens.java
+++ b/src/main/java/br/ufpr/lpoo/utils/Imagens.java
@@ -1,4 +1,4 @@
-package br.ufpr.lpoo.controllers;
+package br.ufpr.lpoo.utils;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
diff --git a/src/main/java/br/ufpr/lpoo/services/Observer.java b/src/main/java/br/ufpr/lpoo/utils/Observer.java
similarity index 86%
rename from src/main/java/br/ufpr/lpoo/services/Observer.java
rename to src/main/java/br/ufpr/lpoo/utils/Observer.java
index 7c96550..92e96d1 100644
--- a/src/main/java/br/ufpr/lpoo/services/Observer.java
+++ b/src/main/java/br/ufpr/lpoo/utils/Observer.java
@@ -1,4 +1,4 @@
-package br.ufpr.lpoo.services;
+package br.ufpr.lpoo.utils;
import java.beans.PropertyChangeListener;
diff --git a/src/main/java/br/ufpr/lpoo/views/Home.java b/src/main/java/br/ufpr/lpoo/views/Home.java
index a6686fc..bb33d74 100644
--- a/src/main/java/br/ufpr/lpoo/views/Home.java
+++ b/src/main/java/br/ufpr/lpoo/views/Home.java
@@ -1,7 +1,7 @@
package br.ufpr.lpoo.views;
-import br.ufpr.lpoo.controllers.Imagens;
-import br.ufpr.lpoo.controllers.Sistema;
+import br.ufpr.lpoo.utils.Imagens;
+import br.ufpr.lpoo.Sistema;
import br.ufpr.lpoo.models.Tela;
import com.intellij.uiDesigner.core.GridConstraints;
import com.intellij.uiDesigner.core.GridLayoutManager;
@@ -9,8 +9,6 @@
import javax.swing.*;
import javax.swing.border.TitledBorder;
import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
/**
* Esta classe representa a tela inicial do sistema.
@@ -28,44 +26,19 @@ public class Home implements Tela {
* Define os valores iniciais para as variáveis de instância e adiciona os ouvintes de ação aos botões.
*/
public Home() {
- clientesButton.addActionListener(new ActionListener() {
- /**
- * Este método é chamado quando o botão Clientes é clicado.
- * Ele navega para a tela ManterCliente.
- *
- * @param e O evento de ação.
- */
- @Override
- public void actionPerformed(ActionEvent e) {
- ManterCliente frame = new ManterCliente();
- Sistema.navigate(frame);
- }
+ clientesButton.addActionListener(e -> {
+ ManterCliente frame = new ManterCliente();
+ Sistema.navigate(frame);
});
- contasButton.addActionListener(new ActionListener() {
- /**
- * Este método é chamado quando o botão Contas é clicado.
- * Ele navega para a tela VincularCliente.
- *
- * @param e O evento de ação.
- */
- @Override
- public void actionPerformed(ActionEvent e) {
- VincularCliente frame = new VincularCliente();
- Sistema.navigate(frame);
- }
+
+ contasButton.addActionListener(e -> {
+ VincularCliente frame = new VincularCliente();
+ Sistema.navigate(frame);
});
- transactionsButton.addActionListener(new ActionListener() {
- /**
- * Este método é chamado quando o botão Transações é clicado.
- * Ele navega para a tela ManipularConta.
- *
- * @param e O evento de ação.
- */
- @Override
- public void actionPerformed(ActionEvent e) {
- ManipularConta frame = new ManipularConta();
- Sistema.navigate(frame);
- }
+
+ transactionsButton.addActionListener(e -> {
+ ManipularConta frame = new ManipularConta();
+ Sistema.navigate(frame);
});
this.initUIComponents();
}
diff --git a/src/main/java/br/ufpr/lpoo/views/ManipularConta.java b/src/main/java/br/ufpr/lpoo/views/ManipularConta.java
index 21bf4b4..206ea19 100644
--- a/src/main/java/br/ufpr/lpoo/views/ManipularConta.java
+++ b/src/main/java/br/ufpr/lpoo/views/ManipularConta.java
@@ -1,8 +1,10 @@
package br.ufpr.lpoo.views;
+import br.ufpr.lpoo.Sistema;
import br.ufpr.lpoo.controllers.*;
import br.ufpr.lpoo.models.*;
-import br.ufpr.lpoo.services.Observer;
+import br.ufpr.lpoo.models.connection.DaoType;
+import br.ufpr.lpoo.utils.Imagens;
import com.intellij.uiDesigner.core.GridConstraints;
import com.intellij.uiDesigner.core.GridLayoutManager;
import com.intellij.uiDesigner.core.Spacer;
@@ -10,8 +12,8 @@
import javax.swing.*;
import javax.swing.border.TitledBorder;
import java.awt.*;
-import java.awt.event.*;
-import java.beans.PropertyChangeEvent;
+
+import static br.ufpr.lpoo.models.connection.DaoType.MYSQL;
/**
* Classe que representa a tela de manipulação de conta
@@ -19,9 +21,10 @@
*
* @see Tela
*/
-public class ManipularConta implements Tela, Observer {
+public class ManipularConta implements Tela {
private Conta conta;
private JPanel frame;
+ private ManipularContaController controller;
private JButton voltarButton;
private JTextField cpfCliente;
private JPanel dadosConta;
@@ -42,6 +45,7 @@ public class ManipularConta implements Tela, Observer {
private JLabel rendimento;
private JLabel numeroConta;
private JLabel warningLimite;
+ private static final DaoType type = MYSQL;
/**
* Construtor da classe ManipularConta
@@ -49,73 +53,63 @@ public class ManipularConta implements Tela, Observer {
* Adiciona os listeners aos botões
*/
public ManipularConta() {
- this.initUIComponents();
+ controller = new ManipularContaController(this);
+ }
- voltarButton.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- Sistema.goBack();
- }
- });
- mostrarSaldo.addItemListener(new ItemListener() {
- @Override
- public void itemStateChanged(ItemEvent e) {
- saldo.setVisible(mostrarSaldo.isSelected());
- }
- });
- buscarButton.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- if (!cpfCliente.getText().isEmpty()) {
- String cpf = cpfCliente.getText();
- conta = pesquisaContaPorCliente(cpf);
- if (conta != null) {
- loadConta();
- dadosConta.setVisible(true);
- }
+ public void setController() {
+ voltarButton.addActionListener(e -> Sistema.goBack());
+
+ buscarButton.addActionListener(e -> {
+ if (cpfCliente.getText().isEmpty()) {
+ MensagensController.aviso(dadosConta, "Digite um CPF para buscar");
+ } else {
+ String cpf = cpfCliente.getText();
+ try {
+ this.controller.buscarConta(cpf);
+ } catch (Exception ex) {
+ MensagensController.aviso(dadosConta, ex.getMessage());
}
}
});
- saqueButton.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- try {
- double valor = Double.parseDouble(valorSaque.getText());
- if (conta.saca(valor)) {
- Mensagens.sucesso(dadosConta, "Saque realizado com sucesso");
- } else {
- Mensagens.aviso(dadosConta, conta.getClass() == ContaCorrente.class ? "Saldo/limite insuficiente" : "O valor restante é inferior ao montante mínimo");
- }
- } catch (NumberFormatException ex) {
- Mensagens.erro(dadosConta, "Valor inserido inválido");
- }
+ mostrarSaldo.addItemListener(e -> saldo.setVisible(mostrarSaldo.isSelected()));
+
+ saqueButton.addActionListener(e -> {
+ try {
+ double valor = Double.parseDouble(valorSaque.getText());
+ this.controller.realizaSaque(valor);
+ MensagensController.sucesso(dadosConta, "Saque realizado com sucesso");
+ } catch (NumberFormatException ex) {
+ MensagensController.erro(dadosConta, "Valor inserido inválido");
+ } catch (IllegalArgumentException ex) {
+ MensagensController.aviso(dadosConta, ex.getMessage());
+ } catch (Exception ex) {
+ MensagensController.erro(dadosConta, "Erro ao realizar saque: " + ex.getMessage());
}
});
- depositoButton.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- try {
- double valor = Double.parseDouble(valorDeposito.getText());
- if (conta.deposita(valor)) {
- Mensagens.sucesso(dadosConta, "Depósito realizado com sucesso");
- } else {
- Mensagens.aviso(dadosConta, "Depósito mínimo não atingido");
- }
- } catch (NumberFormatException ex) {
- Mensagens.erro(dadosConta, "Valor inserido inválido");
- }
+
+ depositoButton.addActionListener(e -> {
+ try {
+ double valor = Double.parseDouble(valorDeposito.getText());
+ this.controller.realizaDeposito(valor);
+ MensagensController.sucesso(dadosConta, "Depósito realizado com sucesso");
+ } catch (NumberFormatException ex) {
+ MensagensController.erro(dadosConta, "Valor inserido inválido");
+ } catch (IllegalArgumentException ex) {
+ MensagensController.aviso(dadosConta, ex.getMessage());
+ } catch (Exception ex) {
+ MensagensController.erro(dadosConta, "Erro ao realizar depósito: " + ex.getMessage());
}
});
- investirButton.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- if (conta.getSaldo() > 0) {
- conta.remunera();
- Mensagens.sucesso(dadosConta, "Investimento realizado com sucesso");
- } else {
- Mensagens.aviso(dadosConta, "Saldo insuficiente para investir");
- }
+
+ investirButton.addActionListener(e -> {
+ try {
+ this.controller.realizaInvestimento();
+ MensagensController.sucesso(dadosConta, "Investimento realizado com sucesso");
+ } catch (IllegalArgumentException ex) {
+ MensagensController.aviso(dadosConta, ex.getMessage());
+ } catch (RuntimeException ex) {
+ MensagensController.erro(dadosConta, ex.getMessage());
}
});
}
@@ -128,30 +122,16 @@ public void actionPerformed(ActionEvent e) {
*/
public ManipularConta(Cliente cliente) {
this();
- conta = cliente.getConta();
cpfCliente.setText(cliente.getCpf());
- loadConta();
- dadosConta.setVisible(true);
- }
-
- private Conta pesquisaContaPorCliente(String cpfCliente) {
- cpfCliente = cpfCliente.replaceAll("[^0-9]", "");
- for (Cliente c : Sistema.getClientes()) {
- if (c.getCpf().equals(cpfCliente)) {
- if (c.getConta() != null) {
- return c.getConta();
- } else {
- Mensagens.aviso(dadosConta, "O cliente pesquisado não possui uma conta");
- return null;
- }
- }
+ try {
+ this.controller.buscarConta(cliente.getCpf());
+ } catch (Exception e) {
+ MensagensController.aviso(dadosConta, e.getMessage());
}
- Mensagens.aviso(dadosConta, "Esse cliente não foi encontrado");
- return null;
}
- private void loadConta() {
- Mensagens.carregando(dadosConta, "Carregando dados da conta...");
+ public void loadConta(Conta conta) {
+ MensagensController.carregando(dadosConta, "Carregando dados da conta...");
saldo.setText("R$ " + String.format("%.2f", conta.getSaldo()).replace(".", ","));
numeroConta.setText("Conta Nº: " + String.format("%6d", conta.getNumero()));
warningLimite.setVisible(conta.getSaldo() < 0);
@@ -162,7 +142,12 @@ private void loadConta() {
tipoConta.setText("Sua conta é do tipo: Conta de Investimento");
rendimento.setText("Seu rendimento é de: 2% do montante total");
}
- conta.addObserver(this);
+ dadosConta.setVisible(true);
+ }
+
+ public void updateSaldo(double newSaldo) {
+ saldo.setText("R$ " + String.format("%.2f", newSaldo).replace(".", ","));
+ warningLimite.setVisible(newSaldo < 0);
}
/**
@@ -186,20 +171,6 @@ public void initUIComponents() {
investirButton.setIcon(Imagens.INVESTIMENTO.icon());
}
- /**
- * Método que atualiza o saldo da conta
- *
- * @param evt Evento de mudança de propriedade
- * @see Observer
- */
- @Override
- public void propertyChange(PropertyChangeEvent evt) {
- if (evt.getPropertyName().equals("saldo")) {
- saldo.setText("R$ " + String.format("%.2f", conta.getSaldo()).replace(".", ","));
- warningLimite.setVisible(conta.getSaldo() < 0);
- }
- }
-
{
// GUI initializer generated by IntelliJ IDEA GUI Designer
// >>> IMPORTANT!! <<<
@@ -355,4 +326,5 @@ public void propertyChange(PropertyChangeEvent evt) {
public JComponent $$$getRootComponent$$$() {
return frame;
}
+
}
diff --git a/src/main/java/br/ufpr/lpoo/views/ManterCliente.form b/src/main/java/br/ufpr/lpoo/views/ManterCliente.form
index 879e10d..d8980db 100644
--- a/src/main/java/br/ufpr/lpoo/views/ManterCliente.form
+++ b/src/main/java/br/ufpr/lpoo/views/ManterCliente.form
@@ -1,9 +1,9 @@
diff --git a/src/main/java/br/ufpr/lpoo/views/ManterCliente.java b/src/main/java/br/ufpr/lpoo/views/ManterCliente.java
index 5e1ed4a..1a469c5 100644
--- a/src/main/java/br/ufpr/lpoo/views/ManterCliente.java
+++ b/src/main/java/br/ufpr/lpoo/views/ManterCliente.java
@@ -1,10 +1,12 @@
package br.ufpr.lpoo.views;
+import br.ufpr.lpoo.Sistema;
import br.ufpr.lpoo.controllers.*;
import br.ufpr.lpoo.models.Cliente;
import br.ufpr.lpoo.models.Endereco;
import br.ufpr.lpoo.models.Tela;
import br.ufpr.lpoo.models.comparables.*;
+import br.ufpr.lpoo.utils.Imagens;
import com.intellij.uiDesigner.core.GridConstraints;
import com.intellij.uiDesigner.core.GridLayoutManager;
@@ -13,10 +15,11 @@
import javax.swing.plaf.FontUIResource;
import javax.swing.text.StyleContext;
import java.awt.*;
-import java.awt.event.*;
import java.util.Comparator;
import java.util.Locale;
+import java.sql.SQLIntegrityConstraintViolationException;
+
/**
* Esta classe representa a tela de manutenção do cliente.
* Ela implementa a interface Tela e define os campos de entrada e botões para inserir, editar, excluir e buscar clientes.
@@ -24,6 +27,7 @@
public class ManterCliente implements Tela {
private JPanel frame;
private JButton voltarButton;
+ private final ManterClienteController controller;
private JTextField textFieldNome;
private JTextField textFieldSobrenome;
private JTextField textFieldLogradouro;
@@ -39,8 +43,9 @@ public class ManterCliente implements Tela {
private JButton excluirButton;
private JScrollPane scrollPanel;
private JComboBox comboOrdem;
+ private JTextField pesquisa;
+ private JButton clearButton;
private Comparator comparator;
- private ManterClienteTableModel tabelaModel = new ManterClienteTableModel(Sistema.getClientes());
/**
@@ -48,261 +53,131 @@ public class ManterCliente implements Tela {
* Define os valores iniciais para as variáveis de instância e adiciona os ouvintes de ação aos botões.
*/
public ManterCliente() {
- this.initUIComponents();
- tabelaClientes.setModel(tabelaModel);
- tabelaClientes.setColumnModel(tabelaClientes.getColumnModel());
-
- comparator = new NomeComparator();
- tabelaModel.sortClientes(comparator);
+ this.controller = new ManterClienteController(this);
+ }
- voltarButton.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- Sistema.goBack();
- }
- });
- inserirButton.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- String nome = textFieldNome.getText();
- String sobreNome = textFieldSobrenome.getText();
- String logradouro = textFieldLogradouro.getText();
- String bairro = textFieldBairro.getText();
- String cidade = textFieldCidade.getText();
- String numero = textFieldNumero.getText();
- String cpf = textFieldCPF.getText();
- String rg = textFieldRG.getText();
+ @Override
+ public void initUIComponents() {
+ this.excluirButton.setIcon(Imagens.DELETE.icon());
+ this.editarButton.setIcon(Imagens.EDIT.icon());
+ this.buscarButton.setIcon(Imagens.SEARCH.icon());
+ this.inserirButton.setIcon(Imagens.ADD.icon());
- areTextFieldsFilled(textFieldNome, "nome");
- areTextFieldsFilled(textFieldSobrenome, "sobrenome");
- areTextFieldsFilled(textFieldLogradouro, "logradouro");
- areTextFieldsFilled(textFieldBairro, "bairro");
- areTextFieldsFilled(textFieldCidade, "cidade");
- areTextFieldsFilled(textFieldNumero, "numero");
- areTextFieldsFilled(textFieldCPF, "CPF");
- areTextFieldsFilled(textFieldRG, "RG");
+ this.scrollPanel.getViewport().setBackground(new Color(5, 28, 59));
+ this.tabelaClientes.getTableHeader().setBackground(new Color(225, 248, 255));
+ }
- cpf = cpf.replaceAll("[^0-9]", "");
+ public void setController(ManterClienteTableModel tabelaModel) {
+ tabelaClientes.setModel(tabelaModel);
+ comparator = new NomeComparator();
+ tabelaModel.sortClientes(comparator);
- if (isInteger(numero)) {
- Mensagens.erro(null, "Número Inválido\n");
- return;
- }
+ voltarButton.addActionListener(e -> Sistema.goBack());
- if (cpf.equals("")) {
- Mensagens.erro(null, "Campo CPF não pode estar vazio\n");
- return;
- }
- if (isCpfExistente(cpf)) {
- Mensagens.erro(null, "CPF já cadastrado\n");
- return;
- }
+ clearButton.addActionListener(e -> clearForm());
- if (!validaCpf(cpf)) {
- Mensagens.erro(null, "CPF inválido\n");
- return;
+ inserirButton.addActionListener(e -> {
+ try {
+ Cliente c = loadForm();
+ controller.cadastrarCliente(c);
+ MensagensController.sucesso(frame, "Cliente cadastrado com sucesso");
+ clearForm();
+ } catch (SQLIntegrityConstraintViolationException ex) {
+ System.out.println(ex.getMessage());
+ if (ex.getMessage().contains("Duplicate entry")) {
+ MensagensController.erro(frame, "CPF já cadastrado");
}
-
- Endereco endereco = new Endereco(logradouro, bairro, numero, cidade);
- Cliente c = new Cliente(nome, sobreNome, endereco, cpf, rg);
-
- Sistema.cadastrarCliente(c);
-
- textFieldNome.setText("");
- textFieldSobrenome.setText("");
- textFieldLogradouro.setText("");
- textFieldBairro.setText("");
- textFieldCidade.setText("");
- textFieldNumero.setText("");
- textFieldCPF.setText("");
- textFieldRG.setText("");
-
- tabelaModel.fireTableDataChanged();
+ } catch (Exception ex) {
+ MensagensController.erro(frame, ex.getMessage());
}
});
-
- buscarButton.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
-
- String cpf = textFieldCPF.getText();
-
- cpf = cpf.replaceAll("[^0-9]", "");
-
- if (cpf.equals("")) {
- Mensagens.aviso(null, "Insira um CPF para buscar\n");
- return;
- }
-
- if (!isCpfExistente(cpf)) {
- Mensagens.erro(null, "CPF não cadastrado\n");
- return;
- }
-
-
- for (Cliente cliente : Sistema.getClientes()) {
- if (cliente.getCpf().equalsIgnoreCase(cpf)) {
- textFieldNome.setText(cliente.getNome());
- textFieldSobrenome.setText(cliente.getSobrenome());
- textFieldLogradouro.setText(cliente.getEndereco().getLogradouro());
- textFieldBairro.setText(cliente.getEndereco().getBairro());
- textFieldCidade.setText(cliente.getEndereco().getCidade());
- textFieldNumero.setText(Integer.toString(cliente.getEndereco().getNumero()));
- textFieldRG.setText(cliente.getRg());
- }
- }
-
+ editarButton.addActionListener(e -> {
+ try {
+ Cliente cliente = loadForm();
+ controller.updateCliente(cliente);
+ MensagensController.sucesso(frame, "Informações editadas\n");
+ clearForm();
+ } catch (Exception ex) {
+ MensagensController.erro(frame, "Não foi possível editar: " + ex.getMessage());
}
});
- editarButton.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
-
- String nome = textFieldNome.getText();
- String sobreNome = textFieldSobrenome.getText();
- String logradouro = textFieldLogradouro.getText();
- String bairro = textFieldBairro.getText();
- String cidade = textFieldCidade.getText();
- String numero = textFieldNumero.getText();
- String cpf = textFieldCPF.getText();
- String rg = textFieldRG.getText();
-
-
- areTextFieldsFilled(textFieldNome, "nome");
- areTextFieldsFilled(textFieldSobrenome, "sobrenome");
- areTextFieldsFilled(textFieldLogradouro, "logradouro");
- areTextFieldsFilled(textFieldBairro, "bairro");
- areTextFieldsFilled(textFieldCidade, "cidade");
- areTextFieldsFilled(textFieldNumero, "numero");
- areTextFieldsFilled(textFieldCPF, "CPF");
- areTextFieldsFilled(textFieldRG, "RG");
-
- if (isInteger(numero)) {
- Mensagens.erro(null, "Número Inválido\n");
- return;
+ excluirButton.addActionListener(e -> {
+ String cpf = textFieldCPF.getText();
+ if (MensagensController.confirmar(frame, "Certeza que deseja excluir o cliente?")) {
+ try {
+ controller.deleteCliente(cpf);
+ MensagensController.sucesso(frame, "CPF '" + cpf + "' removido\n");
+ } catch (RuntimeException ex) {
+ MensagensController.erro(frame, "Ocorreu um erro ao remover o cliente: " + ex.getMessage());
}
-
- if (cpf.equals("")) {
- Mensagens.aviso(null, "CPF não pode ser vazio\n");
- return;
- }
-
- if (!validaCpf(cpf)) {
- Mensagens.erro(null, "CPF Inválido\n");
- return;
- }
-
- cpf = cpf.replaceAll("[^0-9]", "");
-
- for (Cliente cliente : Sistema.getClientes()) {
- if (cliente.getCpf().equalsIgnoreCase(cpf)) {
- cliente.setNome(nome);
- cliente.setSobrenome(sobreNome);
- Endereco endereco = new Endereco(logradouro, bairro, numero, cidade);
- cliente.setEndereco(endereco);
- cliente.setRg(rg);
- }
- }
-
- Mensagens.sucesso(null, "Informações editadas\n");
-
- textFieldNome.setText("");
- textFieldSobrenome.setText("");
- textFieldLogradouro.setText("");
- textFieldBairro.setText("");
- textFieldCidade.setText("");
- textFieldNumero.setText("");
- textFieldCPF.setText("");
- textFieldRG.setText("");
-
- tabelaModel.fireTableDataChanged();
}
});
- excluirButton.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- String cpf = textFieldCPF.getText();
-
- cpf = cpf.replaceAll("[^0-9]", "");
-
- String finalCpf = cpf;
-
- Sistema.getClientes().removeIf(cliente -> cliente.getCpf().equalsIgnoreCase(finalCpf));
-
- Mensagens.sucesso(null, "CPF " + cpf + " removido\n");
-
- textFieldNome.setText("");
- textFieldSobrenome.setText("");
- textFieldLogradouro.setText("");
- textFieldBairro.setText("");
- textFieldCidade.setText("");
- textFieldNumero.setText("");
- textFieldCPF.setText("");
- textFieldRG.setText("");
-
- tabelaModel.fireTableDataChanged();
+ buscarButton.addActionListener(e -> {
+ try {
+ String query = pesquisa.getText();
+ controller.buscarClientes(query);
+ } catch (RuntimeException ex) {
+ MensagensController.aviso(frame, ex.getMessage());
}
});
- comboOrdem.addComponentListener(new ComponentAdapter() {
- });
- comboOrdem.addItemListener(new ItemListener() {
- @Override
- public void itemStateChanged(ItemEvent e) {
- if (comboOrdem.getSelectedIndex() == 1) {
- comparator = new SobrenomeComparator();
- } else {
- comparator = new NomeComparator();
- }
- tabelaModel.sortClientes(comparator);
+
+ comboOrdem.addItemListener(e -> {
+ if (comboOrdem.getSelectedIndex() == 1) {
+ comparator = new SobrenomeComparator();
+ } else {
+ comparator = new NomeComparator();
}
+ tabelaModel.sortClientes(comparator);
});
- }
- @Override
- public void initUIComponents() {
- this.excluirButton.setIcon(Imagens.DELETE.icon());
- this.editarButton.setIcon(Imagens.EDIT.icon());
- this.buscarButton.setIcon(Imagens.SEARCH.icon());
- this.inserirButton.setIcon(Imagens.ADD.icon());
+ tabelaClientes.getSelectionModel().addListSelectionListener(e -> controller.selectCliente(tabelaClientes.getSelectedRow()));
+ }
- this.scrollPanel.getViewport().setBackground(new Color(5, 28, 59));
- this.tabelaClientes.getTableHeader().setBackground(new Color(225, 248, 255));
+ public void loadCliente(Cliente cliente) {
+ textFieldNome.setText(cliente.getNome());
+ textFieldCPF.setText(cliente.getCpf());
+ textFieldSobrenome.setText(cliente.getSobrenome());
+ textFieldLogradouro.setText(cliente.getEndereco().getLogradouro());
+ textFieldBairro.setText(cliente.getEndereco().getBairro());
+ textFieldCidade.setText(cliente.getEndereco().getCidade());
+ textFieldNumero.setText(Integer.toString(cliente.getEndereco().getNumero()));
+ textFieldRG.setText(cliente.getRg());
}
- /**
- * Verifica se um CPF já existe na lista de clientes.
- *
- * @param cpf O CPF a ser verificado.
- * @return Verdadeiro se o CPF já existe, falso caso contrário.
- */
- private boolean isCpfExistente(String cpf) {
- for (Cliente cliente : Sistema.getClientes()) {
- if (cliente.getCpf().equalsIgnoreCase(cpf)) {
- return true;
- }
- }
- return false;
+ public Cliente loadForm() {
+ String nome = textFieldNome.getText();
+ String sobreNome = textFieldSobrenome.getText();
+ String logradouro = textFieldLogradouro.getText();
+ String bairro = textFieldBairro.getText();
+ String cidade = textFieldCidade.getText();
+ String numero = textFieldNumero.getText();
+ String cpf = textFieldCPF.getText();
+ cpf = cpf.replaceAll("[^0-9]", "");
+ String rg = textFieldRG.getText();
+
+ this.areTextFieldsFilled(textFieldNome, "nome");
+ this.areTextFieldsFilled(textFieldSobrenome, "sobrenome");
+ this.areTextFieldsFilled(textFieldLogradouro, "logradouro");
+ this.areTextFieldsFilled(textFieldBairro, "bairro");
+ this.areTextFieldsFilled(textFieldCidade, "cidade");
+ this.areTextFieldsFilled(textFieldRG, "RG");
+
+ Endereco endereco = new Endereco(logradouro, bairro, numero, cidade);
+ return new Cliente(nome, sobreNome, endereco, cpf, rg);
}
- /**
- * Verifica se uma string pode ser convertida para um número inteiro.
- *
- * @param str A string a ser verificada.
- * @return Verdadeiro se a string pode ser convertida para um número inteiro, falso caso contrário.
- */
- public static boolean isInteger(String str) {
- if (str == null) {
- return true;
- }
- try {
- Integer.parseInt(str);
- } catch (NumberFormatException e) {
- return true;
- }
- return false;
+ public void clearForm() {
+ textFieldNome.setText("");
+ textFieldSobrenome.setText("");
+ textFieldLogradouro.setText("");
+ textFieldBairro.setText("");
+ textFieldCidade.setText("");
+ textFieldNumero.setText("");
+ textFieldCPF.setText("");
+ textFieldRG.setText("");
}
/**
@@ -310,54 +185,11 @@ public static boolean isInteger(String str) {
*
* @param textField O campo de texto a ser verificado.
* @param campo O nome do campo a ser verificado.
- * @return Verdadeiro se o campo de texto está preenchido, falso caso contrário.
*/
- public static boolean areTextFieldsFilled(JTextField textField, String campo) {
+ public void areTextFieldsFilled(JTextField textField, String campo) {
if (textField.getText().trim().isEmpty()) {
- Mensagens.aviso(null, "Campo " + campo + " está vazio\n");
- return false;
+ throw new IllegalArgumentException("Campo " + campo + " não pode estar vazio\n");
}
- return true;
- }
-
- /**
- * Valida um CPF.
- *
- * @param cpf O CPF a ser validado.
- * @return Verdadeiro se o CPF é válido, falso caso contrário.
- */
- public static boolean validaCpf(String cpf) {
- int soma = 0, resto = 0;
-
- cpf = cpf.replaceAll("[^0-9]", "");
-
- if (cpf.matches("[0-9]{11}") && !cpf.matches("^(\\d)\\1{10}")) {
- for (int i = 0; i < 9; i++) {
- soma += Integer.parseInt(cpf.substring(i, i + 1)) * (10 - i);
- }
- resto = 11 - (soma % 11);
- if (resto == 10 || resto == 11) {
- resto = 0;
- }
- if (resto != Integer.parseInt(cpf.substring(9, 10))) {
- return false;
- }
-
- soma = 0;
- for (int i = 0; i < 10; i++) {
- soma += Integer.parseInt(cpf.substring(i, i + 1)) * (11 - i);
- }
- resto = 11 - (soma % 11);
- if (resto == 10 || resto == 11) {
- resto = 0;
- }
- if (resto != Integer.parseInt(cpf.substring(10, 11))) {
- return false;
- }
-
- return true;
- }
- return false;
}
/**
@@ -369,10 +201,6 @@ public JPanel getFrame() {
return frame;
}
- private void createUIComponents() {
- // TODO: place custom component creation code here
- }
-
{
// GUI initializer generated by IntelliJ IDEA GUI Designer
// >>> IMPORTANT!! <<<
@@ -389,27 +217,11 @@ private void createUIComponents() {
*/
private void $$$setupUI$$$() {
frame = new JPanel();
- frame.setLayout(new GridLayoutManager(7, 4, new Insets(8, 8, 8, 8), -1, -1));
+ frame.setLayout(new GridLayoutManager(6, 4, new Insets(8, 8, 8, 8), -1, -1));
frame.setBackground(new Color(-16442309));
frame.setEnabled(false);
frame.setForeground(new Color(-1967873));
frame.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(new Color(-1967873)), "Clientes", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, null, new Color(-1967873)));
- final JLabel label1 = new JLabel();
- label1.setForeground(new Color(-1967873));
- label1.setText("Nome:");
- frame.add(label1, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
- final JLabel label2 = new JLabel();
- label2.setForeground(new Color(-1967873));
- label2.setText("Sobrenome:");
- frame.add(label2, new GridConstraints(0, 2, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
- textFieldNome = new JTextField();
- textFieldNome.setBackground(new Color(-2500135));
- textFieldNome.setForeground(new Color(-16777216));
- frame.add(textFieldNome, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false));
- textFieldSobrenome = new JTextField();
- textFieldSobrenome.setBackground(new Color(-2500135));
- textFieldSobrenome.setForeground(new Color(-16777216));
- frame.add(textFieldSobrenome, new GridConstraints(0, 3, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false));
final JPanel panel1 = new JPanel();
panel1.setLayout(new GridLayoutManager(2, 6, new Insets(0, 0, 0, 0), -1, -1));
panel1.setBackground(new Color(-16442309));
@@ -417,30 +229,30 @@ private void createUIComponents() {
panel1.setForeground(new Color(-1967873));
frame.add(panel1, new GridConstraints(1, 0, 1, 4, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false));
panel1.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(new Color(-1967873)), "Endereço", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, this.$$$getFont$$$(null, -1, -1, panel1.getFont()), new Color(-1967873)));
- final JLabel label3 = new JLabel();
- label3.setForeground(new Color(-1967873));
- label3.setText("Logradouro:");
- panel1.add(label3, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(50, 17), null, 0, false));
+ final JLabel label1 = new JLabel();
+ label1.setForeground(new Color(-1967873));
+ label1.setText("Logradouro:");
+ panel1.add(label1, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(50, 17), null, 0, false));
textFieldLogradouro = new JTextField();
textFieldLogradouro.setBackground(new Color(-2500135));
textFieldLogradouro.setForeground(new Color(-16777216));
panel1.add(textFieldLogradouro, new GridConstraints(0, 1, 1, 5, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false));
- final JLabel label4 = new JLabel();
- label4.setForeground(new Color(-1967873));
- label4.setText("Número:");
- panel1.add(label4, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(50, 17), null, 0, false));
- final JLabel label5 = new JLabel();
- label5.setForeground(new Color(-1967873));
- label5.setText("Bairro:");
- panel1.add(label5, new GridConstraints(1, 2, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ final JLabel label2 = new JLabel();
+ label2.setForeground(new Color(-1967873));
+ label2.setText("Número:");
+ panel1.add(label2, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(50, 17), null, 0, false));
+ final JLabel label3 = new JLabel();
+ label3.setForeground(new Color(-1967873));
+ label3.setText("Bairro:");
+ panel1.add(label3, new GridConstraints(1, 2, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
textFieldBairro = new JTextField();
textFieldBairro.setBackground(new Color(-2500135));
textFieldBairro.setForeground(new Color(-16777216));
panel1.add(textFieldBairro, new GridConstraints(1, 3, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false));
- final JLabel label6 = new JLabel();
- label6.setForeground(new Color(-1967873));
- label6.setText("Cidade:");
- panel1.add(label6, new GridConstraints(1, 4, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ final JLabel label4 = new JLabel();
+ label4.setForeground(new Color(-1967873));
+ label4.setText("Cidade:");
+ panel1.add(label4, new GridConstraints(1, 4, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
textFieldCidade = new JTextField();
textFieldCidade.setBackground(new Color(-2500135));
textFieldCidade.setForeground(new Color(-16777216));
@@ -449,30 +261,10 @@ private void createUIComponents() {
textFieldNumero.setBackground(new Color(-2500135));
textFieldNumero.setForeground(new Color(-16777216));
panel1.add(textFieldNumero, new GridConstraints(1, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false));
- final JLabel label7 = new JLabel();
- label7.setForeground(new Color(-1967873));
- label7.setText("CPF:");
- frame.add(label7, new GridConstraints(2, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
- textFieldCPF = new JTextField();
- textFieldCPF.setBackground(new Color(-2500135));
- textFieldCPF.setForeground(new Color(-16777216));
- frame.add(textFieldCPF, new GridConstraints(2, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false));
- final JLabel label8 = new JLabel();
- label8.setForeground(new Color(-1967873));
- label8.setText("RG:");
- frame.add(label8, new GridConstraints(2, 2, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
- textFieldRG = new JTextField();
- textFieldRG.setBackground(new Color(-2500135));
- textFieldRG.setForeground(new Color(-16777216));
- frame.add(textFieldRG, new GridConstraints(2, 3, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false));
- buscarButton = new JButton();
- buscarButton.setBackground(new Color(-11487489));
- buscarButton.setText("Buscar");
- frame.add(buscarButton, new GridConstraints(3, 2, 1, 2, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
scrollPanel = new JScrollPane();
scrollPanel.setBackground(new Color(-14134075));
scrollPanel.setEnabled(true);
- frame.add(scrollPanel, new GridConstraints(5, 0, 1, 4, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, null, null, null, 0, false));
+ frame.add(scrollPanel, new GridConstraints(4, 0, 1, 4, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, null, null, null, 0, false));
scrollPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(new Color(-16442309)), null, TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, null, null));
tabelaClientes = new JTable();
tabelaClientes.setBackground(new Color(-11487489));
@@ -484,37 +276,100 @@ private void createUIComponents() {
tabelaClientes.putClientProperty("JTable.autoStartsEdit", Boolean.FALSE);
tabelaClientes.putClientProperty("Table.isFileList", Boolean.FALSE);
scrollPanel.setViewportView(tabelaClientes);
- inserirButton = new JButton();
- inserirButton.setBackground(new Color(-11487489));
- inserirButton.setText("Inserir");
- frame.add(inserirButton, new GridConstraints(3, 0, 1, 2, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
voltarButton = new JButton();
voltarButton.setBackground(new Color(-11487489));
voltarButton.setText("Voltar");
- frame.add(voltarButton, new GridConstraints(6, 3, 1, 1, GridConstraints.ANCHOR_EAST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
- final JLabel label9 = new JLabel();
- label9.setForeground(new Color(-1967873));
- label9.setText("Clientes cadastrados");
- frame.add(label9, new GridConstraints(4, 0, 1, 2, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
- editarButton = new JButton();
- editarButton.setBackground(new Color(-11487489));
- editarButton.setText("Editar");
- frame.add(editarButton, new GridConstraints(6, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
- excluirButton = new JButton();
- excluirButton.setBackground(new Color(-11487489));
- excluirButton.setText("Excluir");
- frame.add(excluirButton, new GridConstraints(6, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ frame.add(voltarButton, new GridConstraints(5, 3, 1, 1, GridConstraints.ANCHOR_EAST, GridConstraints.FILL_VERTICAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ final JLabel label5 = new JLabel();
+ label5.setForeground(new Color(-1967873));
+ label5.setText("Clientes cadastrados");
+ frame.add(label5, new GridConstraints(3, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ final JPanel panel2 = new JPanel();
+ panel2.setLayout(new GridLayoutManager(1, 4, new Insets(0, 0, 0, 0), -1, -1));
+ panel2.setBackground(new Color(-16442309));
+ frame.add(panel2, new GridConstraints(3, 1, 1, 3, GridConstraints.ANCHOR_EAST, GridConstraints.FILL_VERTICAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false));
+ pesquisa = new JTextField();
+ pesquisa.setBackground(new Color(-2500135));
+ pesquisa.setForeground(new Color(-16777216));
+ panel2.add(pesquisa, new GridConstraints(0, 2, 1, 1, GridConstraints.ANCHOR_EAST, GridConstraints.FILL_VERTICAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false));
+ buscarButton = new JButton();
+ buscarButton.setBackground(new Color(-11487489));
+ buscarButton.setText("Buscar");
+ panel2.add(buscarButton, new GridConstraints(0, 3, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_VERTICAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ final JLabel label6 = new JLabel();
+ label6.setForeground(new Color(-1967873));
+ label6.setText("Ordenar por");
+ panel2.add(label6, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_EAST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
comboOrdem = new JComboBox();
comboOrdem.setBackground(new Color(-2500135));
final DefaultComboBoxModel defaultComboBoxModel1 = new DefaultComboBoxModel();
defaultComboBoxModel1.addElement("nome");
defaultComboBoxModel1.addElement("sobrenome");
comboOrdem.setModel(defaultComboBoxModel1);
- frame.add(comboOrdem, new GridConstraints(4, 3, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ panel2.add(comboOrdem, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ final JPanel panel3 = new JPanel();
+ panel3.setLayout(new GridLayoutManager(1, 2, new Insets(0, 0, 0, 0), -1, -1));
+ panel3.setBackground(new Color(-16442309));
+ frame.add(panel3, new GridConstraints(5, 0, 1, 2, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_VERTICAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false));
+ excluirButton = new JButton();
+ excluirButton.setBackground(new Color(-11487489));
+ excluirButton.setText("Excluir");
+ panel3.add(excluirButton, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ editarButton = new JButton();
+ editarButton.setBackground(new Color(-11487489));
+ editarButton.setText("Editar");
+ panel3.add(editarButton, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ final JPanel panel4 = new JPanel();
+ panel4.setLayout(new GridLayoutManager(2, 4, new Insets(0, 0, 0, 0), -1, -1));
+ panel4.setBackground(new Color(-16442309));
+ frame.add(panel4, new GridConstraints(0, 0, 1, 4, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false));
+ final JLabel label7 = new JLabel();
+ label7.setForeground(new Color(-1967873));
+ label7.setText("Nome:");
+ panel4.add(label7, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ textFieldNome = new JTextField();
+ textFieldNome.setBackground(new Color(-2500135));
+ textFieldNome.setForeground(new Color(-16777216));
+ panel4.add(textFieldNome, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false));
+ final JLabel label8 = new JLabel();
+ label8.setForeground(new Color(-1967873));
+ label8.setText("Sobrenome:");
+ panel4.add(label8, new GridConstraints(0, 2, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ textFieldSobrenome = new JTextField();
+ textFieldSobrenome.setBackground(new Color(-2500135));
+ textFieldSobrenome.setForeground(new Color(-16777216));
+ panel4.add(textFieldSobrenome, new GridConstraints(0, 3, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false));
+ final JLabel label9 = new JLabel();
+ label9.setForeground(new Color(-1967873));
+ label9.setText("CPF:");
+ panel4.add(label9, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ textFieldCPF = new JTextField();
+ textFieldCPF.setBackground(new Color(-2500135));
+ textFieldCPF.setDisabledTextColor(new Color(-16442309));
+ textFieldCPF.setEditable(true);
+ textFieldCPF.setEnabled(true);
+ textFieldCPF.setForeground(new Color(-16777216));
+ panel4.add(textFieldCPF, new GridConstraints(1, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false));
final JLabel label10 = new JLabel();
label10.setForeground(new Color(-1967873));
- label10.setText("Ordenar por");
- frame.add(label10, new GridConstraints(4, 2, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ label10.setText("RG:");
+ panel4.add(label10, new GridConstraints(1, 2, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ textFieldRG = new JTextField();
+ textFieldRG.setBackground(new Color(-2500135));
+ textFieldRG.setForeground(new Color(-16777216));
+ panel4.add(textFieldRG, new GridConstraints(1, 3, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false));
+ final JPanel panel5 = new JPanel();
+ panel5.setLayout(new GridLayoutManager(1, 2, new Insets(0, 0, 0, 0), -1, -1));
+ panel5.setBackground(new Color(-16442309));
+ frame.add(panel5, new GridConstraints(2, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_VERTICAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false));
+ inserirButton = new JButton();
+ inserirButton.setBackground(new Color(-11487489));
+ inserirButton.setText("Inserir");
+ panel5.add(inserirButton, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ clearButton = new JButton();
+ clearButton.setBackground(new Color(-11487489));
+ clearButton.setText("Limpar");
+ panel5.add(clearButton, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
}
/**
@@ -545,4 +400,5 @@ private void createUIComponents() {
public JComponent $$$getRootComponent$$$() {
return frame;
}
+
}
diff --git a/src/main/java/br/ufpr/lpoo/views/ManterClienteTableModel.java b/src/main/java/br/ufpr/lpoo/views/ManterClienteTableModel.java
index da0d879..b92266a 100644
--- a/src/main/java/br/ufpr/lpoo/views/ManterClienteTableModel.java
+++ b/src/main/java/br/ufpr/lpoo/views/ManterClienteTableModel.java
@@ -11,7 +11,7 @@
* Ela estende AbstractTableModel e define as colunas e os dados da tabela.
*/
public class ManterClienteTableModel extends AbstractTableModel {
- private final List clientes;
+ private List clientes;
private final String[] columns = {"Nome", "Sobrenome", "Endereço", "CPF", "RG"};
/**
@@ -24,6 +24,15 @@ public ManterClienteTableModel(List clientes){
this.clientes = clientes;
}
+ public void updateList(List lista){
+ this.clientes = lista;
+ this.fireTableDataChanged();
+ }
+
+ public Cliente getClientAt(int index){
+ return this.clientes.get(index);
+ }
+
/**
* Este método retorna o número de linhas da tabela.
*
diff --git a/src/main/java/br/ufpr/lpoo/views/VincularCliente.java b/src/main/java/br/ufpr/lpoo/views/VincularCliente.java
index f2c0e68..f27b777 100644
--- a/src/main/java/br/ufpr/lpoo/views/VincularCliente.java
+++ b/src/main/java/br/ufpr/lpoo/views/VincularCliente.java
@@ -1,19 +1,15 @@
package br.ufpr.lpoo.views;
+import br.ufpr.lpoo.Sistema;
import br.ufpr.lpoo.controllers.*;
-import br.ufpr.lpoo.models.Cliente;
-import br.ufpr.lpoo.models.ContaCorrente;
-import br.ufpr.lpoo.models.ContaInvestimento;
-import br.ufpr.lpoo.models.Tela;
-import br.ufpr.lpoo.services.FactoryConta;
+import br.ufpr.lpoo.models.*;
+import br.ufpr.lpoo.utils.Imagens;
import com.intellij.uiDesigner.core.GridConstraints;
import com.intellij.uiDesigner.core.GridLayoutManager;
import javax.swing.*;
import javax.swing.border.TitledBorder;
import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
import java.util.*;
/**
@@ -22,6 +18,7 @@
*/
public class VincularCliente implements Tela {
private JPanel frame;
+ private final VincularClienteController controller;
private JButton voltarButton;
private JComboBox tipoConta;
private JTextField depositoInicial;
@@ -35,8 +32,6 @@ public class VincularCliente implements Tela {
private JPanel formulario;
private JButton gerenciarContaButton;
private JButton excluirButton;
- private VincularTableModel tabelaModel = new VincularTableModel(Sistema.getClientes());
- private Cliente clienteSelecionado;
private ContaCorrente corrente;
private ContaInvestimento investimento;
private JScrollPane scrollPanel;
@@ -46,124 +41,108 @@ public class VincularCliente implements Tela {
* Inicializa os componentes da interface e define os listeners dos botões.
*/
public VincularCliente() {
- this.initUIComponents();
+ controller = new VincularClienteController(this);
+ }
+ public void setController(VincularTableModel tabelaModel) {
tabela.setModel(tabelaModel);
- tabela.setColumnModel(tabela.getColumnModel());
- voltarButton.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- Sistema.goBack();
- }
- });
+ voltarButton.addActionListener(e -> Sistema.goBack());
- tipoConta.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent actionEvent) {
- label1.setText("Depósito Inicial:");
+ tipoConta.addActionListener(e -> this.controller.selectTipo((String) tipoConta.getSelectedItem()));
- switch (Objects.requireNonNull(tipoConta.getSelectedItem()).toString()) {
- case "Conta Corrente":
- formulario.setVisible(true);
- label2.setText("Limite:");
- label3.setVisible(false);
- textField3.setVisible(false);
- break;
- case "Conta Investimento":
- formulario.setVisible(true);
- label3.setVisible(true);
- textField3.setVisible(true);
- label2.setText("Montante Mínimo:");
- label3.setText("Depósito Mínimo:");
- break;
- default:
- formulario.setVisible(false);
- break;
- }
- }
- });
+ tabela.getSelectionModel().addListSelectionListener(e -> controller.selectCliente(tabela.getSelectedRow()));
+ salvarButton.addActionListener(e -> {
+ try {
+ ArrayList campos = new ArrayList<>(Arrays.asList(depositoInicial, textField2, textField3));
+ controller.abrirConta(controller.validaCampos(campos));
- tabela.getSelectionModel().addListSelectionListener(e -> {
- if (tabela.getSelectedRow() != -1) {
- clienteSelecionado = Sistema.getClientes().get(tabela.getSelectedRow());
+ MensagensController.sucesso(frame, "Conta cadastrada com sucesso!");
+
+ formulario.setVisible(false);
tipoConta.setEnabled(false);
- excluirButton.setVisible(true);
- gerenciarContaButton.setVisible(true);
- salvarButton.setVisible(false);
- switch (clienteSelecionado.getConta() != null ? clienteSelecionado.getConta().getClass().getSimpleName() : "") {
- case "ContaCorrente":
- tipoConta.setSelectedItem("Conta Corrente");
- corrente = (ContaCorrente) clienteSelecionado.getConta();
- depositoInicial.setText(String.valueOf(corrente.getDepositoInicial()));
- textField2.setText(String.valueOf(corrente.getLimite()));
- break;
- case "ContaInvestimento":
- tipoConta.setSelectedItem("Conta Investimento");
- investimento = (ContaInvestimento) clienteSelecionado.getConta();
- depositoInicial.setText(String.valueOf(investimento.getDepositoInicial()));
- textField2.setText(String.valueOf(investimento.getMontanteMinimo()));
- textField3.setText(String.valueOf(investimento.getDepositoMinimo()));
- break;
- default:
- tipoConta.setSelectedItem("");
- depositoInicial.setText("");
- textField2.setText("");
- textField3.setText("");
- excluirButton.setVisible(false);
- gerenciarContaButton.setVisible(false);
- salvarButton.setVisible(true);
- tipoConta.setEnabled(true);
- break;
- }
+
+ } catch (IllegalArgumentException ex) {
+ MensagensController.aviso(frame, ex.getMessage());
+ } catch (Exception ex) {
+ MensagensController.erro(frame, ex.getMessage());
}
});
-
- salvarButton.addActionListener(new ActionListener() {
-
- @Override
- public void actionPerformed(ActionEvent e) {
-
- FactoryConta factory = new FactoryConta();
- ArrayList campos = new ArrayList<>(Arrays.asList(depositoInicial, textField2, textField3));
-
+ excluirButton.addActionListener(e -> {
+ if (MensagensController.confirmar(frame, "Tem certeza que deseja excluir a conta?")) {
try {
- factory.abrirConta(tipoConta.getSelectedItem().toString(), clienteSelecionado, validaCampos(campos));
- Mensagens.sucesso(frame, "Conta cadastrada com sucesso!");
- formulario.setVisible(false);
- tipoConta.setEnabled(false);
- tabelaModel.fireTableDataChanged();
+ this.controller.deleteConta();
- } catch (NumberFormatException ex) {
- Mensagens.erro(frame, ex.getMessage());
- } catch (IllegalArgumentException ex) {
- Mensagens.aviso(frame, ex.getMessage());
+ tipoConta.setSelectedIndex(0);
+ MensagensController.sucesso(frame, "Conta excluída com sucesso");
+ } catch (Exception ex) {
+ MensagensController.erro(frame, ex.getMessage());
}
}
});
- gerenciarContaButton.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- Sistema.navigate(new ManipularConta(clienteSelecionado));
- }
- });
+ gerenciarContaButton.addActionListener(e -> Sistema.navigate(new ManipularConta(this.controller.getClienteSelecionado())));
+ }
- excluirButton.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
+ public void switchForms(Conta conta) {
+ tipoConta.setEnabled(false);
+ excluirButton.setVisible(true);
+ gerenciarContaButton.setVisible(true);
+ salvarButton.setVisible(false);
+ if (conta == null) {
+ tipoConta.setSelectedItem("");
+ depositoInicial.setText("");
+ textField2.setText("");
+ textField3.setText("");
+ excluirButton.setVisible(false);
+ gerenciarContaButton.setVisible(false);
+ salvarButton.setVisible(true);
+ tipoConta.setEnabled(true);
+ } else {
+ loadFormGerenciamento(conta);
+ }
+ }
- if (!Mensagens.confirmar(frame, "Tem certeza que deseja excluir a conta?")) return;
- Sistema.getContas().remove(clienteSelecionado.getConta());
- clienteSelecionado.setConta(null);
- tabelaModel.fireTableDataChanged();
- Mensagens.sucesso(frame, "Conta excluída com sucesso");
- tipoConta.setSelectedIndex(0);
+ public void loadFormAbertura(String tipo) {
+ label1.setText("Depósito Inicial:");
+ switch (tipo) {
+ case "Conta Corrente":
+ formulario.setVisible(true);
+ label2.setText("Limite:");
+ label3.setVisible(false);
+ textField3.setVisible(false);
+ break;
+ case "Conta Investimento":
+ formulario.setVisible(true);
+ label3.setVisible(true);
+ textField3.setVisible(true);
+ label2.setText("Montante Mínimo:");
+ label3.setText("Depósito Mínimo:");
+ break;
+ default:
+ formulario.setVisible(false);
+ break;
+ }
+ }
- }
- });
+ public void loadFormGerenciamento(Conta conta) {
+ switch (conta.getClass().getSimpleName()) {
+ case "ContaCorrente":
+ tipoConta.setSelectedItem("Conta Corrente");
+ corrente = (ContaCorrente) conta;
+ depositoInicial.setText(String.valueOf(corrente.getDepositoInicial()));
+ textField2.setText(String.valueOf(corrente.getLimite()));
+ break;
+ case "ContaInvestimento":
+ tipoConta.setSelectedItem("Conta Investimento");
+ investimento = (ContaInvestimento) conta;
+ depositoInicial.setText(String.valueOf(investimento.getDepositoInicial()));
+ textField2.setText(String.valueOf(investimento.getMontanteMinimo()));
+ textField3.setText(String.valueOf(investimento.getDepositoMinimo()));
+ break;
+ }
}
/**
@@ -183,30 +162,6 @@ public void initUIComponents() {
tabela.getTableHeader().setBackground(new Color(225, 248, 255));
}
- /**
- * Valida se todos os campos necessários estão preenchidos corretamente e, se estiver, retorna um array com os valores dos campos.
- *
- * @param campos ArrayList de campos de texto a serem verificados.
- * @return ArrayList com os valores dos campos.
- * @throws NumberFormatException Se um dos campos não for um número válido.
- * @throws IllegalArgumentException Se um dos campos estiver vazio.
- */
- private ArrayList validaCampos(ArrayList campos) {
- ArrayList valores = new ArrayList<>();
- for (JTextField campo : campos) {
- if (!campo.isVisible()) continue;
- if (campo.getText().isEmpty()) {
- throw new IllegalArgumentException("Preencha todos os campos");
- }
- try {
- valores.add(Double.parseDouble(campo.getText()));
- } catch (NumberFormatException e) {
- throw new NumberFormatException("Valor '" + campo.getText() + "' inválido");
- }
- }
- return valores;
- }
-
{
// GUI initializer generated by IntelliJ IDEA GUI Designer
// >>> IMPORTANT!! <<<
@@ -304,4 +259,5 @@ private ArrayList validaCampos(ArrayList campos) {
public JComponent $$$getRootComponent$$$() {
return frame;
}
+
}
diff --git a/src/main/java/br/ufpr/lpoo/views/VincularTableModel.java b/src/main/java/br/ufpr/lpoo/views/VincularTableModel.java
index 541b944..d04625d 100644
--- a/src/main/java/br/ufpr/lpoo/views/VincularTableModel.java
+++ b/src/main/java/br/ufpr/lpoo/views/VincularTableModel.java
@@ -10,7 +10,7 @@
* Ela estende AbstractTableModel e define as colunas e os dados da tabela.
*/
public class VincularTableModel extends AbstractTableModel {
- private final List clientes;
+ private List clientes;
private final String[] colunas = {"Nome", "CPF", "Tipo da Conta", "Conta"};
/**
@@ -23,6 +23,15 @@ public VincularTableModel(List clientes) {
this.clientes = clientes;
}
+ public void updateList(List lista){
+ this.clientes = lista;
+ this.fireTableDataChanged();
+ }
+
+ public Cliente getClientAt(int index){
+ return this.clientes.get(index);
+ }
+
/**
* Este método retorna o número de linhas da tabela.
*
diff --git a/src/main/java/br/ufpr/lpoo/views/dialog/ConfirmDialog.form b/src/main/java/br/ufpr/lpoo/views/dialog/ConfirmDialog.form
new file mode 100644
index 0000000..b766132
--- /dev/null
+++ b/src/main/java/br/ufpr/lpoo/views/dialog/ConfirmDialog.form
@@ -0,0 +1,83 @@
+
+
diff --git a/src/main/java/br/ufpr/lpoo/views/dialog/ConfirmDialog.java b/src/main/java/br/ufpr/lpoo/views/dialog/ConfirmDialog.java
new file mode 100644
index 0000000..463e5b2
--- /dev/null
+++ b/src/main/java/br/ufpr/lpoo/views/dialog/ConfirmDialog.java
@@ -0,0 +1,103 @@
+package br.ufpr.lpoo.views.dialog;
+
+import br.ufpr.lpoo.controllers.MensagensController;
+import br.ufpr.lpoo.utils.Imagens;
+import com.intellij.uiDesigner.core.GridConstraints;
+import com.intellij.uiDesigner.core.GridLayoutManager;
+
+import javax.swing.*;
+import java.awt.*;
+
+public class ConfirmDialog {
+ private final JDialog dialog;
+ private JPanel contentPane;
+ private JButton buttonOK;
+ private JLabel mensagem;
+ private JButton buttonCancel;
+
+ public ConfirmDialog() {
+ this.dialog = new JDialog();
+ this.dialog.setContentPane(contentPane);
+ Image image = Imagens.MAIN.image();
+ this.dialog.setIconImage(image);
+ }
+
+ public void initDialog(Component origin, String mensagem) {
+ this.dialog.setModal(true);
+ this.dialog.setSize(310 + (mensagem.length() * 2), 150);
+ this.dialog.setLocationRelativeTo(origin);
+ this.dialog.setTitle("Confirmar");
+ this.dialog.getRootPane().setDefaultButton(buttonOK);
+
+ this.mensagem.setText(mensagem);
+ buttonOK.addActionListener(e -> {
+ MensagensController.toogleResponse(true);
+ close();
+ });
+ buttonCancel.addActionListener(e -> {
+ MensagensController.toogleResponse(false);
+ close();
+ });
+ }
+
+ public void open() {
+ this.dialog.setVisible(true);
+ }
+
+ private void close() {
+ this.dialog.dispose();
+ }
+
+ {
+// GUI initializer generated by IntelliJ IDEA GUI Designer
+// >>> IMPORTANT!! <<<
+// DO NOT EDIT OR ADD ANY CODE HERE!
+ $$$setupUI$$$();
+ }
+
+ /**
+ * Method generated by IntelliJ IDEA GUI Designer
+ * >>> IMPORTANT!! <<<
+ * DO NOT edit this method OR call it in your code!
+ *
+ * @noinspection ALL
+ */
+ private void $$$setupUI$$$() {
+ contentPane = new JPanel();
+ contentPane.setLayout(new GridLayoutManager(2, 1, new Insets(10, 10, 10, 10), -1, -1));
+ contentPane.setBackground(new Color(-2500135));
+ final JPanel panel1 = new JPanel();
+ panel1.setLayout(new GridLayoutManager(1, 1, new Insets(0, 0, 0, 0), -1, -1));
+ contentPane.add(panel1, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, 1, null, null, null, 0, false));
+ final JPanel panel2 = new JPanel();
+ panel2.setLayout(new GridLayoutManager(1, 2, new Insets(0, 0, 0, 0), -1, -1));
+ panel2.setBackground(new Color(-2500135));
+ panel1.add(panel2, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false));
+ buttonOK = new JButton();
+ buttonOK.setBackground(new Color(-11487489));
+ buttonOK.setForeground(new Color(-16777216));
+ buttonOK.setText("Confirmar");
+ panel2.add(buttonOK, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_EAST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ buttonCancel = new JButton();
+ buttonCancel.setBackground(new Color(-11487489));
+ buttonCancel.setForeground(new Color(-16777216));
+ buttonCancel.setText("Cancelar");
+ panel2.add(buttonCancel, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ final JPanel panel3 = new JPanel();
+ panel3.setLayout(new GridLayoutManager(1, 1, new Insets(0, 0, 0, 0), -1, -1));
+ panel3.setBackground(new Color(-2500135));
+ contentPane.add(panel3, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false));
+ mensagem = new JLabel();
+ mensagem.setBackground(new Color(-1967873));
+ mensagem.setForeground(new Color(-16442309));
+ mensagem.setText("Label");
+ panel3.add(mensagem, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, 1, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ }
+
+ /**
+ * @noinspection ALL
+ */
+ public JComponent $$$getRootComponent$$$() {
+ return contentPane;
+ }
+}
diff --git a/src/main/java/br/ufpr/lpoo/views/dialog/MessageDialog.form b/src/main/java/br/ufpr/lpoo/views/dialog/MessageDialog.form
new file mode 100644
index 0000000..6d4980d
--- /dev/null
+++ b/src/main/java/br/ufpr/lpoo/views/dialog/MessageDialog.form
@@ -0,0 +1,81 @@
+
+
diff --git a/src/main/java/br/ufpr/lpoo/views/dialog/MessageDialog.java b/src/main/java/br/ufpr/lpoo/views/dialog/MessageDialog.java
new file mode 100644
index 0000000..a19caeb
--- /dev/null
+++ b/src/main/java/br/ufpr/lpoo/views/dialog/MessageDialog.java
@@ -0,0 +1,94 @@
+package br.ufpr.lpoo.views.dialog;
+
+import br.ufpr.lpoo.utils.Imagens;
+import com.intellij.uiDesigner.core.GridConstraints;
+import com.intellij.uiDesigner.core.GridLayoutManager;
+
+import javax.swing.*;
+import java.awt.*;
+
+public class MessageDialog {
+ private final JDialog dialog;
+ private JPanel contentPane;
+ private JButton buttonOK;
+ private JLabel mensagem;
+ private JLabel icone;
+
+ public MessageDialog() {
+ this.dialog = new JDialog();
+ this.dialog.setContentPane(contentPane);
+ Image image = Imagens.MAIN.image();
+ this.dialog.setIconImage(image);
+ }
+
+ public void initDialog(Component origin, String mensagem, String title, Icon icon) {
+ this.dialog.setModal(true);
+ this.dialog.setSize(310 + (mensagem.length() * 2), 150);
+ this.dialog.setLocationRelativeTo(origin);
+ this.dialog.setTitle(title);
+ this.dialog.getRootPane().setDefaultButton(buttonOK);
+
+ this.mensagem.setText(mensagem);
+ this.icone.setIcon(icon);
+ buttonOK.addActionListener(e -> onOK());
+ }
+
+ public void open() {
+ this.dialog.setVisible(true);
+ }
+
+ private void onOK() {
+ this.dialog.dispose();
+ }
+
+ {
+// GUI initializer generated by IntelliJ IDEA GUI Designer
+// >>> IMPORTANT!! <<<
+// DO NOT EDIT OR ADD ANY CODE HERE!
+ $$$setupUI$$$();
+ }
+
+ /**
+ * Method generated by IntelliJ IDEA GUI Designer
+ * >>> IMPORTANT!! <<<
+ * DO NOT edit this method OR call it in your code!
+ *
+ * @noinspection ALL
+ */
+ private void $$$setupUI$$$() {
+ contentPane = new JPanel();
+ contentPane.setLayout(new GridLayoutManager(2, 1, new Insets(10, 10, 10, 10), -1, -1));
+ contentPane.setBackground(new Color(-2500135));
+ final JPanel panel1 = new JPanel();
+ panel1.setLayout(new GridLayoutManager(1, 1, new Insets(0, 0, 0, 0), -1, -1));
+ contentPane.add(panel1, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, 1, null, null, null, 0, false));
+ final JPanel panel2 = new JPanel();
+ panel2.setLayout(new GridLayoutManager(1, 1, new Insets(0, 0, 0, 0), -1, -1));
+ panel2.setBackground(new Color(-2500135));
+ panel1.add(panel2, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false));
+ buttonOK = new JButton();
+ buttonOK.setBackground(new Color(-11487489));
+ buttonOK.setForeground(new Color(-16777216));
+ buttonOK.setText("OK");
+ panel2.add(buttonOK, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ final JPanel panel3 = new JPanel();
+ panel3.setLayout(new GridLayoutManager(1, 2, new Insets(0, 0, 0, 0), -1, -1));
+ panel3.setBackground(new Color(-2500135));
+ contentPane.add(panel3, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false));
+ mensagem = new JLabel();
+ mensagem.setBackground(new Color(-1967873));
+ mensagem.setForeground(new Color(-16442309));
+ mensagem.setText("Label");
+ panel3.add(mensagem, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, 1, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ icone = new JLabel();
+ icone.setText("");
+ panel3.add(icone, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_EAST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ }
+
+ /**
+ * @noinspection ALL
+ */
+ public JComponent $$$getRootComponent$$$() {
+ return contentPane;
+ }
+}
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index c53ef50..680cb96 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -1,3 +1,3 @@
-mysql.database.url=${database.url}
-mysql.database.username=${database.username}
-mysql.database.password=${database.password}
\ No newline at end of file
+mysql.database.url=${database_url}
+mysql.database.username=${database_username}
+mysql.database.password=${database_password}
\ No newline at end of file
diff --git a/src/main/resources/assets/load.png b/src/main/resources/assets/load.png
index e7647a1..105e8d0 100644
Binary files a/src/main/resources/assets/load.png and b/src/main/resources/assets/load.png differ
diff --git a/src/main/resources/scripts/database_inserts.sql b/src/main/resources/scripts/database_inserts.sql
index 2413bfa..075c478 100644
--- a/src/main/resources/scripts/database_inserts.sql
+++ b/src/main/resources/scripts/database_inserts.sql
@@ -22,11 +22,11 @@ INSERT INTO cliente (cpf, nome, sobrenome, rg, idEndereco) VALUES
('31057053090', 'Raul', 'Bana', '130632776', 3),
('12345678909', 'Maria', 'Silva', '123456789', 4),
('98765432100', 'João', 'Pereira', '987654321', 5),
-('11122233344', 'Ana', 'Costa', '111222333', 6),
-('55566677788', 'Carlos', 'Oliveira', '555666777', 7),
-('99988877766', 'Fernanda', 'Almeida', '999888777', 8),
-('44455566677', 'Paulo', 'Souza', '444555666', 9),
-('22233344455', 'Juliana', 'Mendes', '222333444', 10);
+('69429562010', 'Ana', 'Costa', '111222333', 6),
+('45940918069', 'Carlos', 'Oliveira', '555666777', 7),
+('38547351035', 'Fernanda', 'Almeida', '999888777', 8),
+('90692230076', 'Paulo', 'Souza', '444555666', 9),
+('82623549079', 'Juliana', 'Mendes', '222333444', 10);
INSERT INTO conta (cpfCliente, saldo) VALUES
('94831227080', 1000.00),
@@ -44,4 +44,11 @@ INSERT INTO contaCorrente (numeroConta, limite, depositoInicial) VALUES
INSERT INTO contaInvestimento (numeroConta, depositoInicial, depositoMinimo, montanteMinimo) VALUES
(4, 2000.00, 1000.00, 2000.00),
(5, 2500.00, 1500.00, 2500.00),
-(6, 3000.00, 2000.00, 3000.00);
\ No newline at end of file
+(6, 3000.00, 2000.00, 3000.00);
+
+UPDATE cliente SET numeroConta = 1 WHERE cpf = '94831227080';
+UPDATE cliente SET numeroConta = 2 WHERE cpf = '88543471087';
+UPDATE cliente SET numeroConta = 3 WHERE cpf = '63287208071';
+UPDATE cliente SET numeroConta = 4 WHERE cpf = '31057053090';
+UPDATE cliente SET numeroConta = 5 WHERE cpf = '12345678909';
+UPDATE cliente SET numeroConta = 6 WHERE cpf = '98765432100';
\ No newline at end of file
diff --git a/src/test/java/br/ufpr/lpoo/controllers/TesteSistema.java b/src/test/java/br/ufpr/lpoo/controllers/TesteSistema.java
deleted file mode 100644
index f9158f7..0000000
--- a/src/test/java/br/ufpr/lpoo/controllers/TesteSistema.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package br.ufpr.lpoo.controllers;
-import br.ufpr.lpoo.models.Cliente;
-import br.ufpr.lpoo.models.Endereco;
-
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-
-public class TesteSistema {
- @Test
- public void adicionarCliente() {
- Endereco endereco = new Endereco("Rua Carlos Maia", "Cajuru", "123", "Curitiba");
- Cliente cliente = new Cliente("João Dória", "Silva", endereco, "400.855.360-67", "123456789");
- Sistema.cadastrarCliente(cliente);
-
- assertEquals(1, Sistema.getClientes().size());
- assertEquals(cliente, Sistema.getClientes().get(0));
- }
-
-}
diff --git a/src/test/java/br/ufpr/lpoo/models/TesteConta.java b/src/test/java/br/ufpr/lpoo/models/TesteConta.java
index 94062dd..18dbdb1 100644
--- a/src/test/java/br/ufpr/lpoo/models/TesteConta.java
+++ b/src/test/java/br/ufpr/lpoo/models/TesteConta.java
@@ -1,5 +1,6 @@
package br.ufpr.lpoo.models;
+import org.junit.Assert;
import org.junit.Test;
public class TesteConta {
@@ -12,72 +13,108 @@ private Cliente criarCliente() {
return new Cliente("Tester", "Teste", criarEndereco(), "77191328070", "232215492");
}
- @Test(expected = IllegalArgumentException.class)
- public void testeNumeroNegativo() {
- Cliente dono = criarCliente();
- new ContaCorrente(-1, dono, 1000, 600);
- }
-
@Test(expected = IllegalArgumentException.class)
public void testeSaldoNegativo() {
Cliente dono = criarCliente();
- new ContaCorrente(1, dono, -1000, 600);
+ try {
+ new ContaCorrente(dono, -1000, 600);
+ } catch (IllegalArgumentException e) {
+ Assert.assertEquals("O saldo deve ser maior que 0.", e.getMessage());
+ throw e;
+ }
}
@Test(expected = IllegalArgumentException.class)
public void testeLimiteNegativo() {
Cliente dono = criarCliente();
- new ContaCorrente(1, dono, 1000, -600);
+ try {
+ new ContaCorrente(dono, 1000, -600);
+ } catch (IllegalArgumentException e) {
+ Assert.assertEquals("Limite deve ser maior ou igual a 0.", e.getMessage());
+ throw e;
+ }
}
- @Test(expected = IllegalArgumentException.class)
+ @Test
public void testeDepositoNegativo() {
Cliente dono = criarCliente();
- ContaCorrente conta = new ContaCorrente(1, dono, 1000, 600);
+ ContaCorrente conta = new ContaCorrente(dono, 1000, 600);
conta.deposita(-200);
+ Assert.assertEquals(1000, conta.getSaldo(), 0.01);
}
- @Test(expected = IllegalArgumentException.class)
+ @Test()
public void testeSaqueNegativo() {
Cliente dono = criarCliente();
- ContaCorrente conta = new ContaCorrente(1, dono, 1000, 600);
+ ContaCorrente conta = new ContaCorrente(dono, 1000, 600);
conta.saca(-200);
+ Assert.assertEquals(1000, conta.getSaldo(), 0.01);
}
@Test(expected = IllegalArgumentException.class)
public void testeDepositoMinimoNegativo() {
Cliente dono = criarCliente();
- new ContaInvestimento(1, dono, 1000, -500, 1000);
+ try {
+ new ContaInvestimento(dono, 1000, -500, 1000);
+ } catch (IllegalArgumentException e) {
+ Assert.assertEquals("Depósito mínimo e montante mínimo devem ser maiores que 0.", e.getMessage());
+ throw e;
+ }
}
@Test(expected = IllegalArgumentException.class)
public void testeMontanteMinimoNegativo() {
Cliente dono = criarCliente();
- new ContaInvestimento(1, dono, 1000, 500, -1000);
+ try {
+ new ContaInvestimento(dono, 1000, 500, -1000);
+ } catch (IllegalArgumentException e) {
+ Assert.assertEquals("Depósito mínimo e montante mínimo devem ser maiores que 0.", e.getMessage());
+ throw e;
+ }
}
@Test(expected = IllegalArgumentException.class)
public void testeDepositoMinimoZero() {
Cliente dono = criarCliente();
- new ContaInvestimento(1, dono, 1000, 0, 1000);
+ try {
+ new ContaInvestimento(dono, 1000, 0, 1000);
+ } catch (IllegalArgumentException e) {
+ Assert.assertEquals("Depósito mínimo e montante mínimo devem ser maiores que 0.", e.getMessage());
+ throw e;
+ }
}
@Test(expected = IllegalArgumentException.class)
public void testeMontanteMinimoZero() {
Cliente dono = criarCliente();
- new ContaInvestimento(1, dono, 1000, 500, 0);
+ try {
+ new ContaInvestimento(dono, 1000, 500, 0);
+ } catch (IllegalArgumentException e) {
+ Assert.assertEquals("Depósito mínimo e montante mínimo devem ser maiores que 0.", e.getMessage());
+ throw e;
+ }
}
@Test(expected = IllegalArgumentException.class)
public void testeDepositoMinimoMaiorQueSaldo() {
Cliente dono = criarCliente();
- new ContaInvestimento(1, dono, 1000, 2000, 1000);
+ try {
+ new ContaInvestimento(dono, 1000, 2000, 1000);
+ } catch (IllegalArgumentException e) {
+ Assert.assertEquals("Saldo inicial menor que o depósito mínimo.", e.getMessage());
+ throw e;
+ }
}
@Test(expected = IllegalArgumentException.class)
public void testeMontanteMinimoMaiorQueSaldo() {
Cliente dono = criarCliente();
- new ContaInvestimento(1, dono, 1000, 500, 2000);
+ try {
+ new ContaInvestimento(dono, 1000, 500, 2000);
+ } catch (IllegalArgumentException e) {
+ Assert.assertEquals("Saldo inicial menor que o montante mínimo.", e.getMessage());
+ throw e;
+ }
}
}
diff --git a/src/test/java/br/ufpr/lpoo/models/connection/TestConnection.java b/src/test/java/br/ufpr/lpoo/models/connection/TestConnection.java
new file mode 100644
index 0000000..b3b6885
--- /dev/null
+++ b/src/test/java/br/ufpr/lpoo/models/connection/TestConnection.java
@@ -0,0 +1,30 @@
+package br.ufpr.lpoo.models.connection;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+public class TestConnection {
+ @Test
+ public void testConnection() {
+ try {
+ Connection connection = ConnectionFactory.getConnection();
+ Assert.assertNotNull(connection);
+ PreparedStatement stmt = connection.prepareStatement("SELECT * FROM cliente WHERE cpf = ?;");
+ stmt.setString(1, "63287208071");
+ ResultSet rs = stmt.executeQuery();
+ Assert.assertNotNull(rs);
+ if (rs.next()) {
+ Assert.assertEquals("63287208071", rs.getString("cpf"));
+ Assert.assertEquals("Leonardo", rs.getString("nome"));
+ }
+ } catch (SQLException e) {
+ Assert.fail("Erro ao conectar ao banco de dados: " + e.getMessage());
+ }
+
+ }
+}
diff --git a/src/test/java/br/ufpr/lpoo/views/TesteManipularConta.java b/src/test/java/br/ufpr/lpoo/views/TesteManipularConta.java
deleted file mode 100644
index 0129f5b..0000000
--- a/src/test/java/br/ufpr/lpoo/views/TesteManipularConta.java
+++ /dev/null
@@ -1,166 +0,0 @@
-package br.ufpr.lpoo.views;
-
-import br.ufpr.lpoo.controllers.Sistema;
-import br.ufpr.lpoo.models.*;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-import javax.swing.*;
-
-import java.awt.*;
-
-import static org.junit.Assert.*;
-
-public class TesteManipularConta {
-
- @Before
- public void setUp() {
- Endereco endereco = new Endereco("Rua", "Bairro", "1", "Cidade");
- Cliente cliente = new Cliente("João", "Silva", endereco, "095.218.850-33", "12345678900");
- Cliente cliente1 = new Cliente("Maria", "Silva", endereco, "302.595.890-12", "12345678901");
- Conta conta = new ContaCorrente(12345, cliente, 1000.0, 0.0);
- Sistema.cadastrarCliente(cliente);
- Sistema.cadastrarCliente(cliente1);
- cliente.setConta(conta);
- }
-
- @After
- public void tearDown() {
- Sistema.getClientes().clear();
- }
-
- @Test
- public void testInstanciarTelaVazia() {
- Tela manipularConta = new ManipularConta();
- JPanel frame = manipularConta.getFrame();
- Component dadosConta = frame.getComponent(4);
-
- assertNotNull(frame);
- assertNotNull(dadosConta);
- assertEquals("javax.swing.JPanel", dadosConta.getClass().getName());
- assertFalse(dadosConta.isVisible());
- }
-
- @Test
- public void testinstanciarTelaComConta(){
- Tela manipularConta = new ManipularConta(Sistema.getClientes().get(0));
- JPanel frame = manipularConta.getFrame();
- Component dadosConta = frame.getComponent(4);
- JTextField cpfCliente = (JTextField) frame.getComponent(1);
-
- assertNotNull(frame);
- assertNotNull(dadosConta);
- assertTrue(dadosConta.isVisible());
- assertEquals("09521885033", cpfCliente.getText());
- }
-
- @Test
- public void testPesquisarContaPorCpf1(){
- Tela manipularConta = new ManipularConta();
- JPanel frame = manipularConta.getFrame();
- Component dadosConta = frame.getComponent(4);
- JTextField cpfCliente = (JTextField) frame.getComponent(1);
- JButton buscarButton = (JButton) frame.getComponent(5);
- cpfCliente.setText("123.456.789-00");
- buscarButton.doClick();
-
- assertNotNull(frame);
- assertNotNull(dadosConta);
- assertFalse(dadosConta.isVisible());
- }
-
- @Test
- public void testPesquisarContaPorCpf2(){
- Tela manipularConta = new ManipularConta();
- JPanel frame = manipularConta.getFrame();
- Component dadosConta = frame.getComponent(4);
- JTextField cpfCliente = (JTextField) frame.getComponent(1);
- JButton buscarButton = (JButton) frame.getComponent(5);
- cpfCliente.setText("095.218.850-33");
- buscarButton.doClick();
-
- assertNotNull(frame);
- assertNotNull(dadosConta);
- assertTrue(dadosConta.isVisible());
- }
-
- @Test
- public void testPesquisarContaPorCpf3(){
- Tela manipularConta = new ManipularConta();
- JPanel frame = manipularConta.getFrame();
- Component dadosConta = frame.getComponent(4);
- JTextField cpfCliente = (JTextField) frame.getComponent(1);
- JButton buscarButton = (JButton) frame.getComponent(5);
- cpfCliente.setText("302.595.890-12");
- buscarButton.doClick();
-
- assertNotNull(frame);
- assertNotNull(dadosConta);
- assertFalse(dadosConta.isVisible());
- }
-
- @Test
- public void testSaque1(){
- Tela manipularConta = new ManipularConta(Sistema.getClientes().get(0));
- JPanel frame = manipularConta.getFrame();
- Component dadosConta = frame.getComponent(4);
- JTabbedPane tabbedPane = (JTabbedPane) ((JPanel) dadosConta).getComponent(3);
- JPanel sacar = (JPanel) tabbedPane.getComponent(0);
- JTextField valorSaque = (JTextField) sacar.getComponent(2);
- JButton saqueButton = (JButton) sacar.getComponent(4);
- JLabel saldo = (JLabel) ((JPanel) ((JPanel) dadosConta).getComponent(1)).getComponent(0);
- valorSaque.setText("500");
- saqueButton.doClick();
-
- assertEquals("R$ 500,00", saldo.getText());
- }
-
- @Test
- public void testSaque2(){
- Tela manipularConta = new ManipularConta(Sistema.getClientes().get(0));
- JPanel frame = manipularConta.getFrame();
- Component dadosConta = frame.getComponent(4);
- JTabbedPane tabbedPane = (JTabbedPane) ((JPanel) dadosConta).getComponent(3);
- JPanel sacar = (JPanel) tabbedPane.getComponent(0);
- JTextField valorSaque = (JTextField) sacar.getComponent(2);
- JButton saqueButton = (JButton) sacar.getComponent(4);
- JLabel saldo = (JLabel) ((JPanel) ((JPanel) dadosConta).getComponent(1)).getComponent(0);
- valorSaque.setText("1500");
- saqueButton.doClick();
-
- assertEquals("R$ 1000,00", saldo.getText());
- }
-
- @Test
- public void remunera(){
- Tela manipularConta = new ManipularConta(Sistema.getClientes().get(0));
- JPanel frame = manipularConta.getFrame();
- Component dadosConta = frame.getComponent(4);
- JTabbedPane tabbedPane = (JTabbedPane) ((JPanel) dadosConta).getComponent(3);
- JPanel investir = (JPanel) tabbedPane.getComponent(2);
- JButton investirButton = (JButton) investir.getComponent(3);
- JLabel saldo = (JLabel) ((JPanel) ((JPanel) dadosConta).getComponent(1)).getComponent(0);
- investirButton.doClick();
-
- assertEquals("R$ 1010,00", saldo.getText());
- }
-
- @Test
- public void testDeposito1(){
- Tela manipularConta = new ManipularConta(Sistema.getClientes().get(0));
- JPanel frame = manipularConta.getFrame();
- Component dadosConta = frame.getComponent(4);
- JTabbedPane tabbedPane = (JTabbedPane) ((JPanel) dadosConta).getComponent(3);
- JPanel depositar = (JPanel) tabbedPane.getComponent(1);
- JTextField valorDeposito = (JTextField) depositar.getComponent(2);
- JButton depositoButton = (JButton) depositar.getComponent(4);
- JLabel saldo = (JLabel) ((JPanel) ((JPanel) dadosConta).getComponent(1)).getComponent(0);
- valorDeposito.setText("500");
- depositoButton.doClick();
-
- assertEquals("R$ 1500,00", saldo.getText());
- }
-
-
-}
diff --git a/src/test/java/br/ufpr/lpoo/views/TesteVincularCliente.java b/src/test/java/br/ufpr/lpoo/views/TesteVincularCliente.java
deleted file mode 100644
index 11f5ad8..0000000
--- a/src/test/java/br/ufpr/lpoo/views/TesteVincularCliente.java
+++ /dev/null
@@ -1,149 +0,0 @@
-package br.ufpr.lpoo.views;
-
-import br.ufpr.lpoo.controllers.Sistema;
-import br.ufpr.lpoo.models.*;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-import javax.swing.*;
-import java.awt.*;
-
-import static org.junit.Assert.*;
-
-
-public class TesteVincularCliente {
-
- @Before
- public void setUp() {
- Endereco endereco = new Endereco("Rua", "Bairro", "1", "Cidade");
- Cliente cliente1 = new Cliente("Maria", "Silva", endereco, "302.595.890-12", "12345678901");
- Sistema.cadastrarCliente(cliente1);
- }
-
- @After
- public void tearDown() {
- Sistema.getClientes().clear();
- }
-
- @Test
- public void testInstanciarTelaVazia() {
- Tela vincularCliente = new VincularCliente();
- JPanel frame = vincularCliente.getFrame();
- Component formulario = frame.getComponent(3);
-
- assertNotNull(frame);
- assertNotNull(formulario);
- assertFalse(formulario.isVisible());
- }
-
- @Test
- public void vincularContaCorrente() {
- VincularCliente vincularCliente = new VincularCliente();
- JPanel frame = vincularCliente.getFrame();
- JComboBox tipoConta = (JComboBox) frame.getComponent(1);
- JPanel formulario = (JPanel) frame.getComponent(3);
- JTextField depositoInicial = (JTextField) formulario.getComponent(8);
- JTextField limite = (JTextField) formulario.getComponent(7);
- JButton salvarButton = (JButton) formulario.getComponent(1);
-
- JScrollPane scrollPane = (JScrollPane) frame.getComponent(2);
- JTable tabela = (JTable) scrollPane.getViewport().getView();
- tabela.selectAll();
-
- tipoConta.setSelectedItem("Conta Corrente");
- depositoInicial.setText("1000");
- limite.setText("500");
- salvarButton.doClick();
-
- Cliente cliente = Sistema.getClientes().get(0);
- assertTrue(cliente.getConta() instanceof ContaCorrente);
- assertEquals(1000, cliente.getConta().getSaldo(), 0.01);
- assertEquals(500, ((ContaCorrente) cliente.getConta()).getLimite(), 0.01);
- }
-
- @Test
- public void vincularContaInvestimento() {
- VincularCliente vincularCliente = new VincularCliente();
- JPanel frame = vincularCliente.getFrame();
- JComboBox tipoConta = (JComboBox) frame.getComponent(1);
- JPanel formulario = (JPanel) frame.getComponent(3);
- JTextField depositoInicial = (JTextField) formulario.getComponent(8);
- JTextField montanteMinimo = (JTextField) formulario.getComponent(7);
- JTextField depositoMinimo = (JTextField) formulario.getComponent(6);
- JButton salvarButton = (JButton) formulario.getComponent(1);
-
- JScrollPane scrollPane = (JScrollPane) frame.getComponent(2);
- JTable tabela = (JTable) scrollPane.getViewport().getView();
- tabela.selectAll();
-
- tipoConta.setSelectedItem("Conta Investimento");
- depositoInicial.setText("1000");
- montanteMinimo.setText("500");
- depositoMinimo.setText("100");
- salvarButton.doClick();
-
- Cliente cliente = Sistema.getClientes().get(0);
- assertTrue(cliente.getConta() instanceof ContaInvestimento);
- assertEquals(1000, cliente.getConta().getSaldo(), 0.01);
- assertEquals(500, ((ContaInvestimento) cliente.getConta()).getMontanteMinimo(), 0.01);
- }
-
- @Test
- public void excluirConta() {
- VincularCliente vincularCliente = new VincularCliente();
- JPanel frame = vincularCliente.getFrame();
- JComboBox tipoConta = (JComboBox) frame.getComponent(1);
- JPanel formulario = (JPanel) frame.getComponent(3);
- JTextField depositoInicial = (JTextField) formulario.getComponent(8);
- JTextField montanteMinimo = (JTextField) formulario.getComponent(7);
- JTextField depositoMinimo = (JTextField) formulario.getComponent(6);
- JButton salvarButton = (JButton) formulario.getComponent(1);
- JButton excluirButton = (JButton) formulario.getComponent(0);
-
- JScrollPane scrollPane = (JScrollPane) frame.getComponent(2);
- JTable tabela = (JTable) scrollPane.getViewport().getView();
- tabela.selectAll();
-
- tipoConta.setSelectedItem("Conta Investimento");
- depositoInicial.setText("1000");
- montanteMinimo.setText("500");
- depositoMinimo.setText("100");
- salvarButton.doClick();
-
- tabela.selectAll();
-
- excluirButton.doClick();
-
- Cliente cliente = Sistema.getClientes().get(0);
- assertNull(cliente.getConta());
- }
-
- @Test
- public void testRedirecionarParaManipularConta() {
- VincularCliente vincularCliente = new VincularCliente();
- JPanel frame = vincularCliente.getFrame();
- JComboBox tipoConta = (JComboBox) frame.getComponent(1);
- JPanel formulario = (JPanel) frame.getComponent(3);
- JTextField depositoInicial = (JTextField) formulario.getComponent(8);
- JTextField montanteMinimo = (JTextField) formulario.getComponent(7);
- JTextField depositoMinimo = (JTextField) formulario.getComponent(6);
- JButton salvarButton = (JButton) formulario.getComponent(1);
- JButton gerenciarButton = (JButton) formulario.getComponent(2);
-
- JScrollPane scrollPane = (JScrollPane) frame.getComponent(2);
- JTable tabela = (JTable) scrollPane.getViewport().getView();
- tabela.selectAll();
-
- tipoConta.setSelectedItem("Conta Investimento");
- depositoInicial.setText("1000");
- montanteMinimo.setText("500");
- depositoMinimo.setText("100");
- salvarButton.doClick();
-
- tabela.selectAll();
- gerenciarButton.doClick();
-
-
- }
-}