package ste.pendu.wordeditor;
import ste.pendu.wordeditor.WordListModel;
import java.io.IOException;
import java.util.Iterator;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.util.List;
import java.util.Vector;
/**
* L'implémentation du modèle.
*/
public abstract class AbstractWordList implements WordListModel
{
protected PropertyChangeSupport support = new PropertyChangeSupport(this);
protected List list = null;
protected String filename = null;
protected boolean saved = false;
public static final String WORD = "word";
public AbstractWordList()
{
super();
this.list = new Vector();
}
/**
* Ajout d'un mot à une position précise.
*
* @param index la position
* @param mot le mot à ajouter
*/
public void addWord(int index, String mot)
{
this.list.add(index, mot);
this.saved=false;
support.firePropertyChange(AbstractWordList.WORD, null, mot);
}
/**
* Ajout d'un mot à la suite.
*
* @param mot le mot à ajouter
* @return <code>true</code> comme le demande l'API Collection
* @see java.util.List#add(Object)
*/
public boolean addWord(String mot)
{
boolean rem = this.list.add(mot);
this.saved=false;
support.firePropertyChange(AbstractWordList.WORD, null, mot);
return rem;
}
/**
* Efface tous les mots en mémoire.
*/
public void clear()
{
this.saved=false;
this.list.clear();
}
/**
* Retourne le nombre de mots.
*
* @return le nombre de mots
*/
public int getWordListSize()
{
return this.list.size();
}
/**
* Retourne un tableau de tous les mots.
*
* @return un tableau contenant tous les mots
*/
public String[] getWords()
{
String[] w = new String[this.getWordListSize()];
w = (String[])this.list.toArray(w);
return w;
}
/**
* Retourne le mot à la position indiquée.
*
* @param index la position du mot recherché
* @return le mot à la position 'index'
*/
public String getWord(int index)
{
return (String)this.list.get(index);
}
/**
* Retourne l'index du mot passé en argument.
*
* @param mot
* @return l'index du mot recherché
*/
public int indexOfWord(String mot)
{
return this.list.indexOf(mot);
}
/**
* État de sauvegarde des mots.
*
* @return s'il n'y a eu aucune modification depuis la dernière
* sauvegarde, la valeur retournée est <code>true</code>, mais s'il y
* a eu une modification, la valeur retournée est <code>false</code>
*/
public boolean isSaved()
{
return this.saved;
}
/**
* Un iterateur sur tous les mots.
*
* @return l'itérateur avec tous les mots
* @see java.util.Iterator
*/
public Iterator iterator()
{
return this.list.iterator();
}
/**
* Retire le mot à l'index.
*
* @param index index du mot à retirer
* @return le mot qui a été supprimé
*/
public String removeWord(int index)
{
String s = (String)this.list.remove(index);
support.firePropertyChange(AbstractWordList.WORD, "XXX", s);
return s;
}
/**
* Retire le mot.
*
* @param mot le mot à supprimer
* @return <code>true</code> si le mot a bien été supprimé,
* <code>false</code> si le mot n'était pas dans la liste
*/
public boolean removeWord(String mot)
{
boolean rem = this.list.remove(mot);
support.firePropertyChange(AbstractWordList.WORD, "XXX", mot);
return rem;
}
/**
* Récupère le nom du fichier.
*
* @return le nom du fichier
*/
public String getFileName()
{
return this.filename;
}
/**
* Ajoute un écouteur des changements de propriété.
*
* @param ecouteur l'écouteur des propriétés
*/
public void addPropertyChangeListener(PropertyChangeListener ecouteur)
{
this.support.addPropertyChangeListener(ecouteur);
}
/**
* Ajoute un écouteur des changements de propriété.
*
* @param nom le nom de la propriété à écouter
* @param ecouteur l'écouteur des propriétés
*/
public void addPropertyChangeListener(String nom,
PropertyChangeListener ecouteur)
{
this.support.addPropertyChangeListener(nom, ecouteur);
}
/**
* Retourne les écouteurs de propriété.
*
* @return les écouteurs
*/
public PropertyChangeListener[] getPropertyChangeListeners()
{
return this.support.getPropertyChangeListeners();
}
/**
* Retourne les écouteurs telle propriété.
*
* @param nom le nom de la propriété dont on veut récupérer l'écouteur
* @return les écouteurs
*/
public PropertyChangeListener[] getPropertyChangeListeners(String nom)
{
return this.support.getPropertyChangeListeners(nom);
}
/**
* Supprimer l'écouteur
*
* @param ecouteur l'écouteur à supprimer
*/
public void removePropertyChangeListener(PropertyChangeListener ecouteur)
{
this.support.removePropertyChangeListener(ecouteur);
}
/**
* Supprimer l'écouteur
*
* @param nom nom de la propriété
* @param ecouteur l'écouteur à supprimer
*/
public void removePropertyChangeListener(String nom, PropertyChangeListener ecouteur)
{
this.support.removePropertyChangeListener(nom, ecouteur);
}
}