Skip to content

Aplicar técnica de refactorización: INTRODUCE PARAMETER OBJECT #1

@montalvorafael

Description

@montalvorafael
public static void removerProduto(Produto producto){
        List<Produto> produtosDoCodigo;
        boolean removerDoEstoque = false;
        String codigo=producto.getCodigo();
        double quantidade=producto.getQuantidade();
        
        if(estoque.containsKey(codigo)){
            produtosDoCodigo = estoque.get(codigo);
            p = produtosDoCodigo.get(0);
            if (produtosDoCodigo.get(0) instanceof ProdutoUnitario) {
                double temp = quantidade;
                for (int i = 0; i < quantidade; i++) {
                    if(produtosDoCodigo.size() > 0 && temp > 0) {                
                        produtosDoCodigo.remove(produtosDoCodigo.get(0));
                        //System.out.println("Removendo um produto de codigo: " + codigo);
                        temp--;
                    }
                    else {
                        //System.out.println("ATENÇÃO! O estoque desse produto acabou: " + p.getNome()); 
                        removerDoEstoque = true;
                        break;
                    }
                }
            }
            else if (p instanceof ProdutoQuilo){
                ProdutoQuilo pdtQuilo = ObtenhaProdutoQuiloTemporario(p);
                        
                double peso = pdtQuilo.getQtdQuilos() - quantidade;
                removerDoEstoque = peso <= 0 ? true : false;
                pdtQuilo.setQtdQuilos(peso);
                produtosDoCodigo.clear();
                produtosDoCodigo.add(pdtQuilo);
            }
            if (removerDoEstoque) {
                Utilitario.ImprimaMensagem("*  ATENÇÃO! O estoque desse produto acabou: " + p.getNome() +"  *"); 
                estoque.remove(codigo);
            }
            else{
                estoque.put(codigo, produtosDoCodigo);
            }
        }else{
            Utilitario.ImprimaMensagem("*  ATENÇÃO! Produto com o código " + codigo + " não encontrado  *");
        }
        System.out.println();
    }

public static boolean produtoParaCompra(Produto producto){
        //Verifica se existe o produto no estoque e se possui a quantidade esperada
        boolean retorno = false;
        List<Produto> produtosDoCodigo = null;
        String codigo= producto.getCodigo();
        double quantidade= producto.getQuantidade();
        boolean validarQuantidade=producto.isValidarQuantidade();
        if(EstoqueDeProdutos.estoque.containsKey(codigo)){
            produtosDoCodigo = estoque.get(codigo);
            if(produtosDoCodigo.get(0) instanceof ProdutoUnitario){
                if(produtosDoCodigo.size() >= quantidade){
                    retorno = true;
                }else{
                    if (validarQuantidade) {
                        Utilitario.ImprimaMensagem("*                    Infelizmente só possuimos "+produtosDoCodigo.size()+" unidades                      *");
                        retorno = false;
                    }
                    else{
                        retorno = true;
                    }
                }
            }
            if(produtosDoCodigo.get(0) instanceof ProdutoQuilo){
                ProdutoQuilo prodKg = (ProdutoQuilo) produtosDoCodigo.get(0);
               
                if(prodKg.getQtdQuilos() >= quantidade){
                    retorno = true;
                }else{
                    if (validarQuantidade) {
                        Utilitario.ImprimaMensagem("*                    Infelizmente só temos "+prodKg.getQtdQuilos()+" KG deste produto!                      *");
                        retorno = false;
                    }
                    else{
                        retorno = true;
                    }
                }
            } 
        }else{
            Utilitario.ImprimaMensagem("*                    Produto Indisponível!                      *");
            retorno = false;
        }
        return retorno;
    }
    
     public static void exibirEstoqueCliente(){
        Produto p = null;
        Utilitario.ImprimaMensagem("*                     PRODUTOS DISPONÍVEIS                      *");
        Iterator listasDeCodigos = EstoqueDeProdutos.estoque.keySet().iterator();
        int quantidade = 0;
        double quilos = 0;
        
        while (listasDeCodigos.hasNext()) {
            String codigo = (String)listasDeCodigos.next();
            Iterator produtos = estoque.get(codigo).iterator();
            boolean mostrarNomeProduto = true;
           
            while (produtos.hasNext()) {
                p = (Produto)produtos.next();
                
                if (mostrarNomeProduto) {
                    System.out.println("Código: " + codigo);
                    System.out.println("Produto: " + p.getNome());
                    mostrarNomeProduto = false;
                }
                
                if (p instanceof ProdutoQuilo) {
                    ProdutoQuilo pdt = (ProdutoQuilo)p;
                    System.out.println("Quilos: " + pdt.getQtdQuilos() + "kg\n");
                }

                quantidade++;
            }
            
            if (p instanceof ProdutoUnitario) {
                System.out.println("Quantidade em estoque = " +quantidade + "\n");
            }
            
            quantidade = 0;
        }
        
        System.out.println();
    }

public abstract class Produto {
    private String nome;
    private String codigo;
    private double valor;
    private double quantidade;
    private boolean validarQuantidade;

    public double getQuantidade() {
        return quantidade;
    }

    public void setQuantidade(double quantidade) {
        this.quantidade = quantidade;
    }

    public boolean isValidarQuantidade() {
        return validarQuantidade;
    }

    public void setValidarQuantidade(boolean validarQuantidade) {
        this.validarQuantidade = validarQuantidade;
    }
    

    public Produto(String codigo, String nome, double valor,double quantidade,boolean validarQuantidade) {
        this.nome = nome;
        this.codigo = codigo;
        this.valor = valor;
        this.quantidade=quantidade;
        this.validarQuantidade=validarQuantidade;
    }

    public String getNome() {
        return nome;
    }
    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getCodigo() {
        return codigo;
    }

    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }
    
    public double getValor() {
        return valor;
    }

    public void setValor(double valor) {
        this.valor = valor;
    }

    public abstract double calcularValor(double qtd);
    
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions