Skip to content

Commit

Permalink
Implementação do Padrão DAO e MVC (#64)
Browse files Browse the repository at this point in the history
  • Loading branch information
Salgado2004 authored Nov 17, 2024
2 parents 5d0f72c + d5f65b4 commit 4e08581
Show file tree
Hide file tree
Showing 47 changed files with 2,197 additions and 1,214 deletions.
4 changes: 2 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@
<artifactId>exec-maven-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<mainClass>br.ufpr.lpoo.controllers.Sistema</mainClass>
<mainClass>br.ufpr.lpoo.Sistema</mainClass>
</configuration>
</plugin>

Expand All @@ -82,7 +82,7 @@
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>br.ufpr.lpoo.controllers.Sistema</mainClass>
<mainClass>br.ufpr.lpoo.Sistema</mainClass>
</manifest>
</archive>
<appendAssemblyId>false</appendAssemblyId>
Expand Down
Original file line number Diff line number Diff line change
@@ -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;

/**
Expand All @@ -16,8 +15,6 @@
public class Sistema {
private static final JFrame frame = new JFrame("Banco TADS");
private static final Stack<Tela> navegacao = new Stack<>();
static final List <Cliente> clientes = new ArrayList<>();
static final List <Conta> contas = new ArrayList<>();

/**
* Método que seta o conteúdo do frame para a tela que está no topo da pilha de navegação
Expand Down Expand Up @@ -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<Cliente>
*/
public static List<Cliente> getClientes(){
return clientes;
}

/**
* Método que retorna a lista de contas
* @return List<Conta>
*/
public static List<Conta> getContas(){
return contas;
}

/**
* Método main que inicializa a aplicação
*
Expand All @@ -88,12 +53,11 @@ public static List<Conta> 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);
Expand All @@ -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);
}

}
Original file line number Diff line number Diff line change
@@ -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());
}
}
}
136 changes: 136 additions & 0 deletions src/main/java/br/ufpr/lpoo/controllers/ManterClienteController.java
Original file line number Diff line number Diff line change
@@ -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<Cliente>
*/
public List<Cliente> 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<Cliente>
*/
public List<Cliente> 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<Cliente> 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());
}
}
Loading

0 comments on commit 4e08581

Please sign in to comment.