Correction exercice 4

/**
 * Un producteur qui produit des instances 
 * de la classe Product. Il range sa production dans
 * une instance de la classe Stock.
 * 
 * @author F.Dagnat
 * @version 2
 */
import java.util.Scanner;

public class Producer {

    /**
     * Chaque producteur recoit un nom. Ce nom peut être modifié par setName et
     * accedé par getName
     */
    private String name;

    /**
     * Chaque producteur est lié à un Stock qui lui est attribué à sa création
     */
    private final Stock myStock;

    /**
     * Construit un producteur en lui attribuant un nom et un Stock.
     * 
     * @param name
     *            le nom du producteur
     * @param Stock
     *            le Stock qui lui est attribué
     */
    public Producer(String name, Stock stock) {
        if ((name == null) || (stock == null))
            throw new NullPointerException();
        this.myStock = stock;
        this.name = name;
    }

    /**
     * Rend le nom du producteur
     * 
     * @return le nom de ce producteur
     */
    public String getName() {
        return this.name;
    }

    /**
     * Rend le Stock associé au producteur
     * 
     * @return le Stock associé à ce producteur
     */
    public Stock getStock() {
        return this.myStock;
    }

    /**
     * Un Producteur produit en mettant un nouveau produit dont le nom est
     * passé en argument dans le Stock.
     * 
     * @param productName
     *            le nom du produit à produire
     */
    public void produce(String productName) {
        if (productName != null)
            this.myStock.add(new Product(productName));
    }

    /**
     * Modifie le nom du producteur
     * 
     * @param name
     *            le nouveau nom du producteur
     */
    public void setName(String name) {
        if (name != null)
            this.name = name;
    }

    /**
     * Rend une chaîne qui décrit les caractéristiques du
     * producteur.
     * 
     * @return description de ce producteur correspondant au nom de celui-ci
     */
    @Override
    public String toString() {
        return "Producteur " + this.name;
    }

    public static void main(String[] args) {
        Stock s = new Stock(9);
        Producer p = new Producer("PME", s);
        while (!p.getStock().isFull())
            p.produce("carotte");
        System.out.println(p);
        System.out.println(p.getStock());
        p.setName("The World Company");
        System.out.println(p.getName());
        System.out.println("Combien de fois voulez vous activer le producteur ?");
        Scanner clavier = new Scanner(System.in);
        int num = clavier.nextInt();
        for (int i = 1; i <= num; i++) {
            while (!p.getStock().isEmpty())
                p.getStock().remove();
            while (!p.getStock().isFull())
                p.produce("banane");
        }
        System.out.println(p.getStock());
    }
}