CarrelloModel.java

package model;

import exception.GenericError;
import model.maglietta.MagliettaBean;
import model.maglietta.MagliettaDAO;
import model.maglietta.MagliettaOrdine;

import java.io.Serializable;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class CarrelloModel implements Serializable {
    private static final long serialVersionUID = 1L;
    private transient ArrayList<MagliettaOrdine> carrello;
    private final transient MagliettaDAO magliettaDAO;

    public CarrelloModel() {
        this(new MagliettaDAO());
    }

    public CarrelloModel(MagliettaDAO dao) {
        this.carrello = new ArrayList<>();
        this.magliettaDAO = dao;
    }

    public List<MagliettaOrdine> getCarrello() {
        return carrello;
    }

    public void setCarrello(List<MagliettaOrdine> carrello) {
        this.carrello = (ArrayList<MagliettaOrdine>) carrello;
    }

    public synchronized void aggiungi(int id, String taglia) {
        for (MagliettaOrdine m : carrello) {
            if (m.getMagliettaBean().getID() == id &&
                m.getTaglia().equals(taglia)) {
                m.incrementaQuantita();
                return;
            }
        }

        try {
            MagliettaBean magliettaBean = magliettaDAO.doRetrieveByKey(id);
            carrello.add(new MagliettaOrdine(magliettaBean, taglia));
        } catch (SQLException e) {
            throw new GenericError();
        }
    }

    public synchronized void setQuantita(int id, int quantita, String taglia) {
        for (MagliettaOrdine m : carrello) {
            if (m.getMagliettaBean().getID() == id && m.getTaglia().equals(taglia)) {
                if (m.getQuantita() <= 0 || quantita == 0)
                    carrello.remove(m);
                else
                    m.setQuantita(quantita);
                return;
            }
        }
    }

    public synchronized void rimuovi(int id, String taglia) {
        carrello.removeIf(m -> m.getMagliettaBean().getID() == id &&
                m.getTaglia().equals(taglia));
    }

}