All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.sf.xolite.graph.PersonSet Maven / Gradle / Ivy

package net.sf.xolite.graph;


import java.util.HashSet;
import java.util.Set;

import net.sf.xolite.XMLEventParser;
import net.sf.xolite.XMLParseException;
import net.sf.xolite.XMLSerializable;
import net.sf.xolite.XMLSerializeException;
import net.sf.xolite.XMLSerializer;


public class PersonSet implements XMLSerializable {


    public static final String PERSON_SET_TAG = "personSet";

    private Set persons;


    public PersonSet() {
        persons = new HashSet();
    }


    public int size() {
        return persons.size();
    }


    public void addPerson(Person p) {
        persons.add(p);
    }


    public Person getPerson(String firstName, String lastName) {
        // This is not the most efficient implementation ;-)
        for (Person p : getAllPersons()) {
            if (p.matchName(firstName, lastName)) return p;
        }
        return null;
    }


    public Iterable getPersons() {
        return persons;
    }


    /**
     * Get the person in the set and recursively all the persons referenced by those persons.
     */
    private Iterable getAllPersons() {
        Set allPersons = new HashSet();
        for (Person p : persons) {
            addRecusrive(p, allPersons);
        }
        return allPersons;
    }


    private void addRecusrive(Person p, Set allPersons) {
        if ((p != null) && !allPersons.contains(p)) {
            allPersons.add(p);
            addRecusrive(p.getFather(), allPersons);
            addRecusrive(p.getMother(), allPersons);
            for (Person child : p.getChildren()) {
                addRecusrive(child, allPersons);
            }
        }
    }


    // --------------------- XMLSerializable interface implementation ------------------------------------------


    public void startElement(String uri, String localName, XMLEventParser parser) throws XMLParseException {
        if (parser.isFirstEvent()) {
            persons.clear();
        } else if (localName.equals(Person.PERSON_TAG)) {
            Person p = (Person) parser.getFactory().createObject(uri, localName, parser);
            addPerson(p);
        }
    }


    public void endElement(String uri, String localName, XMLEventParser parser) throws XMLParseException {
    }


    public void serialize(XMLSerializer serializer) throws XMLSerializeException {
        serializer.startPrefixMapping("p", Person.PERSON_NAMESPACE_URI);
        serializer.startElement(Person.PERSON_NAMESPACE_URI, PERSON_SET_TAG);
        for (Person p : getAllPersons()) {
            p.serialize(serializer);
        }
        serializer.endElement(Person.PERSON_NAMESPACE_URI, PERSON_SET_TAG);
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy