记录neo4j图形数据库关系线的遍历
- /**
- *
- * 终端设备可视化关系网图
- * @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.****.net/u012191627/article/details/50675901
- /**
- *
- * 终端设备可视化关系网图
- * @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.****.net/u012191627/article/details/50675901