object);
if (subject instanceof GroundedNode) {
if (object instanceof GroundedNode) {
terminalMolecules.add(new TerminalMoleculeImpl(triple));
} else {
ContextualMoleculeImpl contextualMolecule = contextualMoleculeMap.get(object);
if (contextualMolecule == null) {
contextualMolecule = new ContextualMoleculeImpl();
contextualMoleculeMap.put(object, contextualMolecule);
}
contextualMolecule.add(triple);
}
} else {
if (object instanceof GroundedNode) {
ContextualMoleculeImpl contextualMolecule = contextualMoleculeMap.get(subject);
if (contextualMolecule == null) {
contextualMolecule = new ContextualMoleculeImpl();
contextualMoleculeMap.put(subject, contextualMolecule);
}
contextualMolecule.add(triple);
} else {
ContextualMoleculeImpl contextualMoleculeForSubject = contextualMoleculeMap.get(subject);
ContextualMoleculeImpl contextualMoleculeForObject = contextualMoleculeMap.get(object);
if ((contextualMoleculeForSubject == null) && (contextualMoleculeForObject == null)) {
ContextualMoleculeImpl contextualMolecule = new ContextualMoleculeImpl();
contextualMoleculeMap.put(subject, contextualMolecule);
contextualMoleculeMap.put(object, contextualMolecule);
contextualMolecule.add(triple);
} else {
if (contextualMoleculeForSubject == null) {
contextualMoleculeMap.put(subject, contextualMoleculeForObject);
contextualMoleculeForObject.add(triple);
} else {
if (contextualMoleculeForObject == null) {
contextualMoleculeMap.put(object, contextualMoleculeForSubject);
contextualMoleculeForSubject.add(triple);
} else {
Node[] ubngn = contextualMoleculeForObject.getUsedButNotGroundedNodes();
//all other have to reference to the modified contextualMolecule as well
contextualMoleculeForSubject.add(triple);
for (Node node : ubngn) {
ContextualMoleculeImpl moleculeToBeAbsorbed = contextualMoleculeMap.get(node);
if (moleculeToBeAbsorbed != null) {
contextualMoleculeForSubject.addAll(moleculeToBeAbsorbed);
}
contextualMoleculeMap.put(node, contextualMoleculeForSubject);
}
}
}
}
}
}
}
functionallyGroundedNodes = new HashSet<FunctionallyGroundedNode>(
fgNodesMap.size());
functionallyGroundedNodes.addAll(fgNodesMap.values());
fgNodesMap = null;
contextualMolecules = new HashSet<MaximumContextualMolecule>();
final Iterator<ContextualMoleculeImpl> iterator = contextualMoleculeMap.values().iterator();
while (iterator.hasNext()) {
ContextualMoleculeImpl molecule = iterator.next();
molecule.markFinalized();
contextualMolecules.add(molecule);
}
}