protected function loadNodes(array $args)
{
$candidateNodeNames = array();
$concreteNodes = array();
if (Arr::isVector($args)) {
foreach ($args as $arg) {
if (is_string($arg)) {
$candidateNodeNames[] = array("type" => null, "name" => $arg);
}
}
} else {
foreach ($args as $key => $value) {
if ($key == "nodes" || $key == "node") {
$nodes = array();
if (is_string($value)) {
$nodes[] = $value;
} elseif (is_array($value)) {
$nodes = $value;
}
foreach ($nodes as $node) {
$candidateNodeNames[] = array("type" => "node", "name" => $node);
}
}
if ($key == "roles" || $key == "role") {
$roles = array();
if (is_string($value)) {
$roles[] = $value;
} elseif (is_array($value)) {
$roles = $value;
}
foreach ($roles as $role) {
$candidateNodeNames[] = array("type" => "role", "name" => $role);
}
}
}
}
foreach ($candidateNodeNames as $candidateNodeName) {
$node = null;
$role = null;
if ($candidateNodeName["type"] === null || $candidateNodeName["type"] == "node") {
$node = Server::getNode($candidateNodeName["name"]);
}
if ($candidateNodeName["type"] === null || $candidateNodeName["type"] == "role") {
$role = Server::getRole($candidateNodeName["name"]);
}
if ($node && $role) {
throw new \RuntimeException("The key '" . $candidateNodeName["name"] . "' was found in both nodes and roles. So It couldn't identify to unique node.");
}
if (!$node && !$role && ($candidateNodeName["type"] === null || $candidateNodeName["type"] == "node")) {
// Passed unregistered node name. Create node instance.
$node = new Node();
$node->setName($candidateNodeName["name"]);
}
if ($node) {
$concreteNodes[$node->getName()] = $node;
}
if ($role) {
foreach ($role as $nodeName) {
$concreteNodes[$nodeName] = Server::getNode($nodeName);
}
}
}
return $concreteNodes;
}