public function buildKeyPath(Entity $obj_gds_entity, $bol_first_node = true)
{
$str_kind = $obj_gds_entity->getKind();
if (null === $str_kind) {
if ($bol_first_node) {
if ($this->obj_schema instanceof Schema) {
$str_kind = $this->obj_schema->getKind();
} else {
throw new \Exception('Could not build full key path, no Schema set on Mapper and no Kind set on Entity');
}
} else {
throw new \Exception('Could not build full key path, no Kind set on (nth node) GDS Entity');
}
}
// Build the first node in the Key Path from this entity
$arr_full_path = [$this->createKeyPathElement(['kind' => $str_kind, 'id' => $obj_gds_entity->getKeyId(), 'name' => $obj_gds_entity->getKeyName()])];
// Add any ancestors to the Key Path
$mix_ancestry = $obj_gds_entity->getAncestry();
if (is_array($mix_ancestry)) {
$arr_ancestor_path = [];
foreach ($mix_ancestry as $arr_ancestor_element) {
$arr_ancestor_path[] = $this->createKeyPathElement($arr_ancestor_element);
}
$arr_full_path = array_merge($arr_ancestor_path, $arr_full_path);
} elseif ($mix_ancestry instanceof Entity) {
$arr_full_path = array_merge($this->buildKeyPath($mix_ancestry, false), $arr_full_path);
}
return $arr_full_path;
}