
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