Correction exercice 4

import java.util.LinkedList;
/**
 * Un document dispose d'un titre, est composé d'un ensemble de
 * section et connaît la section en cours de manipulation. Il offre
 * des services de déplacements entre section, d'ajout de section et
 * d'affichage
 */
public class Document {
    /** Le titre du document */
    private String title;
    /** Les sections contenues dans le document. */
    private LinkedList<Section> sections;
    /** L'index de la section courante (-1 s'il est avant le premier
     * élément). */
    private int position;

    /**
     * constructeur prenant comme paramètre le titre du document
     * @param theTitle titre du document
     */
    public Document(String theTitle){
        title = theTitle;
        sections = new LinkedList<Section>();
        position = -1;
    }
    /** modifie la section courante en passant à la section suivante
     * (s'il y a d'autres sections)
     */
    public void goToNextSection(){
        if (sections.size()==0 || position == sections.size() - 1)
            return;
        position++;
    }
    /** modifie la section courante en passant à la section pécédente
     * (s'il y a d'autres sections)
     */
    public void goToPreviousSection(){
        if (sections.size()==0 || position == -1)
            return;
        position--;
    }
    /** ajoute après la section courante la nouvelle section passée en
     * paramètre. La section ajoutée devient la section courante
     * @param section la section à ajouter
     */
    public void insertSection(Section section){
        position++;
        sections.add(position,section);
    }
    /** renvoie la section courante s'il y en a une
     */
    public Section currentSection(){
        if (sections.size()==0 || position == -1)
            return null;
        return sections.get(position);
    }
    /** Pour les tests */
    private void currentPosition(){
        System.out.println("Current position is " + position + "/" + sections.size());
    }

    /** rend une chaîne de caractères qui décrit le document avec
     *  les sections et de leurs paragraphes associés
     * @result le contenu du document avec son titre
     */
    public String toString(){
        String body = "";
        int counter = 1;
        for(Section s : sections) {
            body += counter + " " + s;
            counter++;
        }
        return title + "\n" + body;
    }

    public static void main(String[] arg){
        Document doc = new Document("le document");

        Section sec1 = new Section("sec1");
        Section sec2 = new Section("sec2");
        Section sec3 = new Section("sec3");

        doc.currentPosition();
        doc.insertSection(sec1);
        doc.currentPosition();
        doc.insertSection(sec2);
        doc.currentPosition();
        doc.insertSection(sec3);
        doc.currentPosition();

        sec1.addParagraph(new Paragraph("le texte1"));
        sec1.addParagraph(new Paragraph("le texte2"));
        sec1.addParagraph(new Paragraph("le texte3"));
        sec2.addParagraph(new Paragraph("le texte4"));
        sec3.addParagraph(new Paragraph("le texte5"));
        sec2.addParagraph(new Paragraph("le texte 4 bis"));


        doc.goToPreviousSection();
        doc.currentPosition();

        doc.goToNextSection();
        doc.currentPosition();


        doc.goToPreviousSection();
        doc.currentPosition();
        doc.goToPreviousSection();
        doc.currentPosition();
        doc.goToPreviousSection();
        doc.currentPosition();
        doc.goToPreviousSection();
        doc.currentPosition();
        doc.goToPreviousSection();
        doc.currentPosition();

        doc.goToNextSection();
        doc.currentPosition();
        doc.goToNextSection();
        doc.currentPosition();
        doc.goToNextSection();
        doc.currentPosition();
        doc.goToNextSection();
        doc.currentPosition();
        doc.insertSection(new Section("sec4"));
        doc.goToNextSection();
        doc.currentPosition();

        System.out.println("Document :\n"+ doc);

        doc.goToPreviousSection();
        doc.currentPosition();
        doc.goToPreviousSection();
        doc.currentPosition();
        doc.insertSection(new Section("sec5"));
        doc.goToPreviousSection();
        doc.currentPosition();
        doc.goToPreviousSection();
        doc.currentPosition();
        doc.goToPreviousSection();
        doc.currentPosition();
        doc.goToPreviousSection();
        doc.currentPosition();
        doc.insertSection(new Section("sec6"));

        System.out.println("Document :\n"+ doc);

        doc.goToNextSection();
        doc.currentPosition();
        doc.goToNextSection();
        doc.currentPosition();
        doc.goToNextSection();
        doc.currentPosition();
        doc.goToNextSection();
        doc.currentPosition();
        doc.goToNextSection();
        doc.currentPosition();
        doc.goToNextSection();
        doc.currentPosition();
        doc.goToNextSection();
        doc.currentPosition();
        doc.goToNextSection();
        doc.currentPosition();
        doc.goToNextSection();
        doc.currentPosition();
        doc.goToNextSection();
        doc.currentPosition();
        doc.insertSection(new Section("sec7"));

        System.out.println("Document :\n"+ doc);

    }
}