package biduledres;

import java.util.*;

public class Face extends ListeSommet {
    public Face() {
    }
    
    public Face(Sommet[] sommets) {
        super(Arrays.asList(sommets));
    }
    
    public Face(Collection c) {
        super(c);
    }
    
    public ListeArete getListeArete() {
        Iterator i = this.iterator();
        ListeArete listeArete = new ListeArete();
        if (i.hasNext()) {
            Sommet s0, s1, s2;
            s0 = (Sommet) i.next();
            s1 = s0;
            while(i.hasNext()) {
                s2 = (Sommet) i.next();
                listeArete.add(new Arete(s1, s2));
                s1 = s2;
            }
            listeArete.add(new Arete(s1, s0));
        }
        return listeArete;
    }
    
    
    public String toXML(int tab) {
        return Util.toXMLListe(tab, "Face", iterator());
    }
    
    // revoie les 2 aretes
    public ListeArete getAretesVoisins(Sommet s) {
        ListeArete retour = new ListeArete();
        Iterator iterator = getListeArete().iterator();
        while (iterator.hasNext()) {
            Arete arete = (Arete) iterator.next();
            if (arete.contains(s)) retour.add(arete);
        }
        return retour;
    }
    
    // revoie l'autre arete attenante au sommet
    public Arete getAreteVoisine(Arete arete, Sommet sommet) {
        Iterator i = getAretesVoisins(sommet).iterator();
        while(i.hasNext()) {
            Arete s = (Arete) i.next();
            if (!s.equals(arete))
                return s;
        }
        return null;
    }
    
    public boolean contains(Arete arete) {
        return getListeArete().contains(arete);
    }
    
    public void substitue(ListeSommet listeSubstitution) {
        LinkedHashSet nouvelleListe = new LinkedHashSet();
        Iterator i = iterator();
        while(i.hasNext()) {
            Sommet s = (Sommet) i.next();
            Iterator j = listeSubstitution.iterator();
            while(j.hasNext()) {
                Sommet sSub = (Sommet) j.next();
                if (s.equals(sSub)) {
                    nouvelleListe.add(sSub);
                    break;
                }
            }
        }
        clear();
        i = nouvelleListe.iterator();
        while(i.hasNext()) add(i.next());
    }
}