package edu.byu.cs.roots.opg.model;
import java.util.Iterator;
import edu.byu.cs.roots.opg.model.Family;
import edu.byu.cs.roots.opg.model.Gender;
import edu.byu.cs.roots.opg.model.Individual;
import edu.byu.cs.roots.opg.util.IterableHashMap;
public class GenData {
IterableHashMap<String,Family> families = new IterableHashMap<String,Family>();
IterableHashMap<String,Individual> individuals = new IterableHashMap<String,Individual>();
public boolean hasLDSOrdinanceData = false;
// private boolean isLinked = false;
public void addFamily(Family fam)
{
families.put(fam.id,fam);
}
public void addIndividual(Individual indi)
{
individuals.put(indi.id, indi);
}
public void link()
{
//link individuals
Individual indi;
Iterator<Individual> it = individuals.iterator();
while (it.hasNext())
{
indi = it.next();
//link fams to individuals
Iterator<String> famIterator = indi.famsIds.iterator();
boolean sealingToSpouseComplete = false;
boolean sealingToSpouse = false;
if (indi.gender == Gender.MALE)
{
sealingToSpouseComplete = true;
sealingToSpouse = true;
}
while (famIterator.hasNext())
{
Family curFam = families.get(famIterator.next());
indi.fams.add(curFam);
//determine sealing to spouse status
//: this part is broken
if (indi.gender == Gender.MALE)
{
if (sealingToSpouseComplete && !curFam.sealingComplete)
sealingToSpouseComplete = false;
if (sealingToSpouse && !curFam.sealing)
{
sealingToSpouse = false;
sealingToSpouseComplete = false;
}
}else if (indi.gender == Gender.FEMALE)
{
if (!sealingToSpouseComplete && curFam.sealingComplete)
{
sealingToSpouse = true;
sealingToSpouseComplete = true;
}
if (!sealingToSpouse && curFam.sealing)
sealingToSpouse = true;
}
}
indi.sealingToSpouse = sealingToSpouse;
indi.sealingToSpouseComplete = sealingToSpouseComplete;
//link famc to individuals
famIterator = indi.famcIds.iterator();
while (famIterator.hasNext())
{
indi.famc.add(families.get(famIterator.next()));
}
//link mother and father
if (indi.primaryParents >= 0)
{
indi.father = individuals.get(families.get(indi.famcIds.get(indi.primaryParents)).husbandId);
indi.mother = individuals.get(families.get(indi.famcIds.get(indi.primaryParents)).wifeId);
}
//is there LDS Ordinance data?
if (!hasLDSOrdinanceData && (indi.baptismComplete || indi.endowmentComplete || indi.sealingToParentsComplete || indi.sealingToSpouseComplete) )
hasLDSOrdinanceData = true;
//clear out ids that have been linked in
indi.famcIds = null;
indi.famsIds = null;
}
//link families
Family fam;
Iterator<Family> itF = families.iterator();
while (itF.hasNext())
{
fam = itF.next();
//link children to family
Iterator<String> childIterator = fam.childrenXRefIds.iterator();
while (childIterator.hasNext())
{
fam.children.add(individuals.get(childIterator.next()));
}
//link in husband and wife
fam.husband = individuals.get(fam.husbandId);
fam.wife = individuals.get(fam.wifeId);
//is there LDS Ordinance data?
if (!hasLDSOrdinanceData && fam.sealing)
hasLDSOrdinanceData = true;
//clear out ids that have been linked in
fam.childrenXRefIds = null;
}
// isLinked = true;
}
}