public static function finalize()
{
if (!file_exists('nodes.csv')) {
return false;
}
fclose(static::$fp_rels);
fclose(static::$fp_nodes);
$config = \Exakat\Config::factory();
$res = shell_exec(<<<SHELL
cd ./batch-import
java -server -Dfile.encoding=UTF-8 -Xmx4G -jar target/batch-import-jar-with-dependencies.jar {$config->neo4j_folder}/data/graph.db ../nodes.csv ../rels.csv 2>/dev/null
cd {$config->neo4j_folder}
./bin/neo4j restart
sleep 1
SHELL
);
$context_options = array('http' => array('method' => 'GET', 'ignore_errors' => true, 'header' => <<<HEADER
Content-type: application/json
Accept: application/json
User-Agent: Exakat v 1.0
HEADER
));
$context = stream_context_create($context_options);
$config = \Exakat\Config::factory();
$response = file_get_contents('http://' . $config->neo4j_host . ':' . $config->neo4j_port . '/db/data/', false, $context);
if (strpos($response, 'NOT_FOUND') !== false) {
$response = file_get_contents('http://' . $config->neo4j_host . ':' . $config->neo4j_port . '/db/data/', false, $context);
}
preg_match("/Importing (\\d+) Nodes/is", $res, $nodes);
preg_match("/Importing (\\d+) Relationships/is", $res, $relations);
$fnodes = -1;
$fp = fopen('nodes.csv', 'r');
while (fgetcsv($fp, 100000, "\t", '"')) {
++$fnodes;
}
fclose($fp);
$frels = -1;
$fp = fopen('rels.csv', 'r');
while (fgetcsv($fp, 1000, "\t", '"')) {
++$frels;
}
fclose($fp);
if ($fnodes != $nodes[1]) {
display("Warning : didn't import enough nodes : {$fnodes} expected, {$nodes[1]} actually imported\n");
} else {
display("{$nodes[1]} nodes imported\n");
display(number_format(filesize('nodes.csv') / 1024, 0) . " ko imported\n");
unlink('nodes.csv');
}
if ($frels != $relations[1]) {
display("Warning : didn't import enough relations : {$frels} expected, {$relations[1]} actually imported\n");
} else {
display("{$relations[1]} relations imported\n");
unlink('rels.csv');
}
return true;
}