Open Kilda Java Documentation
CypherExecutor.java
Go to the documentation of this file.
1 package org.openkilda.wfm.topology.stats;
2 
3 import org.neo4j.driver.v1.*;
4 import org.slf4j.Logger;
5 import org.slf4j.LoggerFactory;
6 
7 import java.util.Iterator;
8 import java.util.List;
9 import java.util.Map;
10 
14 public class CypherExecutor {
15  private static final Logger logger = LoggerFactory.getLogger(CypherExecutor.class);
16  private final Driver driver;
17 
23  public CypherExecutor(String url) {
24  this(url, null, null);
25  }
26 
34  public CypherExecutor(String url, String username, String password) {
35  boolean hasPassword = password != null && !password.isEmpty();
36  AuthToken token = hasPassword ? AuthTokens.basic(username, password) : AuthTokens.none();
37  logger.debug("connecting to neo4j at " + url);
38  driver = GraphDatabase.driver(url, token,
39  Config.build().withEncryptionLevel(Config.EncryptionLevel.NONE).toConfig());
40  }
41 
49  public Iterator<Map<String, Object>> query(String query, Map<String, Object> params) {
50  try (Session session = driver.session()) {
51  List<Map<String, Object>> list = session.run(query, params)
52  .list(r -> r.asMap(CypherExecutor::convert));
53  return list.iterator();
54  }
55  }
56 
63  private static Object convert(Value value) {
64  switch (value.type().name()) {
65  case "PATH":
66  return value.asList(CypherExecutor::convert);
67  case "NODE":
68  case "RELATIONSHIP":
69  return value.asMap();
70  }
71  return value.asObject();
72  }
73 }
value
Definition: nodes.py:62
Iterator< Map< String, Object > > query(String query, Map< String, Object > params)
CypherExecutor(String url, String username, String password)