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);
}
}