您的位置:首页 > 数据库

记录neo4j图形数据库关系线的遍历

2017-07-29 11:27 295 查看
/**
*
* 终端设备可视化关系网图
* @param mac
* @return
* @throws Exception
*/
public JSONObject findEquipByRestAPI(String mac) throws Exception {

JSONObject jsonData = new JSONObject();
Node startNode = findNode(phoneLabel, "mac", mac.trim());
if (startNode == null)
return null;

if (startNode == null || !startNode.hasLabel(phoneLabel))
return null;
JSONArray nodeArray = new JSONArray();
JSONArray linksArray = new JSONArray();
JSONObject nodeobj = new JSONObject();
Iterator<String> proKeys = startNode.getPropertyKeys().iterator();
int i = 0;
nodeobj.put("id", i);
String key = "";
while (proKeys.hasNext()) {
key = proKeys.next();
nodeobj.put(key, startNode.getProperty(key).toString());
nodeobj.put("type", "phone");
}

HashMap<Integer,Integer> dict = new HashMap<Integer,Integer>();
dict.put((int)startNode.getId(), i);
nodeArray.add(nodeobj);

//获取关系下的路径
TraversalDescription ships = Traversal.description().breadthFirst()
.relationships(RelationType.CONTAIN)
.relationships(RelationType.REGISTER)
.relationships(RelationType.HAVE);

//遍历所有的关系path
for(Path path : ships.traverse(startNode)){
int start =0;
int end = 0;

/*Node start_Node = path.startNode();
Node end_Node = path.endNode();*/

// path = (21938)--[CONTAIN,22803]-->(21941)<--[CONTAIN,22049]--(21940)
Iterator<Relationship> it = path.relationships().iterator();
//遍历每条path  获取  [CONTAIN,22803]  开始节点和结束节点
while(it.hasNext()){
Relationship next = it.next();

//(21940)
Node start_Node = next.getStartNode();
//(21941)
Node end_Node = next.getEndNode();

if(start_Node != end_Node){
if(dict.toString().contains(start_Node.getId()+"")){
start = dict.get((int) start_Node.getId());
}
else{
nodeobj = this.renderer(start_Node);
if(nodeobj.size() > 0 && nodeobj != null){
start = nodeArray.size();
nodeobj.put("id", start);
nodeArray.add(nodeobj);
dict.put((int) start_Node.getId(), start);
}
}

if(dict.toString().contains(end_Node.getId()+"")){
end = dict.get((int)end_Node.getId());
}
else{
nodeobj = this.renderer(end_Node);

if(nodeobj.size() > 0 && nodeobj != null){
end = nodeArray.size();
nodeobj.put("id", end);
nodeArray.add(nodeobj);
dict.put((int) end_Node.getId(), end);
}
}
JSONObject link = new JSONObject();
link.put("source", start);
link.put("target", end);
if(!linksArray.contains(link)){
linksArray.add(link);
}
}
}

/*Node start_Node = path.startNode();
Node end_Node = path.endNode();*/

}
jsonData.put("links", linksArray);
jsonData.put("nodes", nodeArray);

return jsonData;

}

private JSONObject renderer(Node node) {
JSONArray nodeArray = new JSONArray();
JSONObject nodeobj = new JSONObject();
if (node.hasLabel(phoneLabel)) {
Iterator<String> proKeys = node.getPropertyKeys().iterator();
while (proKeys.hasNext()) {
String key = proKeys.next();
if (!"pic".equals(key)) {
nodeobj.put(key, node.getProperty(key).toString());
nodeobj.put("type", "phone");
}
}
nodeArray.add(nodeobj);
}
if (node.hasLabel(qqLabel)) {
Iterator<String> proKeys = node.getPropertyKeys().iterator();
while (proKeys.hasNext()) {
String key = proKeys.next();
if (!"pic".equals(key)) {
nodeobj.put(key, node.getProperty(key).toString());
nodeobj.put("type", "qq");
}
}
nodeArray.add(nodeobj);
}
if (node.hasLabel(emailLabel)) {
Iterator<String> proKeys = node.getPropertyKeys().iterator();
while (proKeys.hasNext()) {
String key = proKeys.next();
if (!"pic".equals(key)) {
nodeobj.put(key, node.getProperty(key).toString());
nodeobj.put("type", "email");
}
}
nodeArray.add(nodeobj);
}
if (node.hasLabel(accountLabel)) {
Iterator<String> proKeys = node.getPropertyKeys().iterator();
while (proKeys.hasNext()) {
String key = proKeys.next();
if (!"pic".equals(key)) {
nodeobj.put(key, node.getProperty(key).toString());
nodeobj.put("type", "account");
}
}
nodeArray.add(nodeobj);
}
if (node.hasLabel(personLabel)) {
Iterator<String> proKeys = node.getPropertyKeys().iterator();
while (proKeys.hasNext()) {
String key = proKeys.next();
nodeobj.put(key, node.getProperty(key).toString());
nodeobj.put("type", "person");
}
nodeArray.add(nodeobj);
}
if (node.hasLabel(addressLabel)) {
Iterator<String> proKeys = node.getPropertyKeys().iterator();
while (proKeys.hasNext()) {
String key = proKeys.next();
nodeobj.put(key, node.getProperty(key).toString());
nodeobj.put("type", "address");
}
nodeArray.add(nodeobj);
}
if (node.hasLabel(phonenumberLabel)) {
Iterator<String> proKeys = node.getPropertyKeys().iterator();
while (proKeys.hasNext()) {
String key = proKeys.next();
nodeobj.put(key, node.getProperty(key).toString());
nodeobj.put("type", "phonenumber");
}
nodeArray.add(nodeobj);
}
if (node.hasLabel(wechatLabel)) {
Iterator<String> proKeys = node.getPropertyKeys().iterator();
while (proKeys.hasNext()) {
String key = proKeys.next();
nodeobj.put(key, node.getProperty(key).toString());
nodeobj.put("type", "wechat");
}
nodeArray.add(nodeobj);
}

return nodeobj;
}





 Traversal框架的使用(Java版本)

http://blog.csdn.net/u012191627/article/details/50675901





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: