comparison src/main/java/de/mpiwg/itgroup/annotations/neo4j/AnnotationStore.java @ 81:3be57c18c693

more fixing bugs with transactions thanks to neo4j 2 :-(
author casties
date Wed, 23 Jul 2014 15:09:54 +0200
parents 4e2dc67997a0
children 5a764c625290
comparison
equal deleted inserted replaced
80:4724fc7b4733 81:3be57c18c693
311 * @param person 311 * @param person
312 * @return 312 * @return
313 */ 313 */
314 public List<Group> getGroupsForPersonNode(Node person) { 314 public List<Group> getGroupsForPersonNode(Node person) {
315 ArrayList<Group> groups = new ArrayList<Group>(); 315 ArrayList<Group> groups = new ArrayList<Group>();
316 Iterable<Relationship> rels = person.getRelationships(RelationTypes.MEMBER_OF); 316 try (Transaction tx = graphDb.beginTx()) {
317 for (Relationship rel : rels) { 317 Iterable<Relationship> rels = person.getRelationships(RelationTypes.MEMBER_OF);
318 Node groupNode = rel.getEndNode(); 318 for (Relationship rel : rels) {
319 Actor group = createActorFromNode(groupNode); 319 Node groupNode = rel.getEndNode();
320 // make sure we're getting a group 320 Actor group = createActorFromNode(groupNode);
321 if (!(group instanceof Group)) { 321 // make sure we're getting a group
322 logger.severe("target of MEMBER_OF is not GROUP! rel=" + rel); 322 if (!(group instanceof Group)) {
323 continue; 323 logger.severe("target of MEMBER_OF is not GROUP! rel=" + rel);
324 } 324 continue;
325 groups.add((Group) group); 325 }
326 groups.add((Group) group);
327 }
328 tx.success();
326 } 329 }
327 return groups; 330 return groups;
328 } 331 }
329 332
330 /** 333 /**
361 * @return 364 * @return
362 */ 365 */
363 public List<Person> getMembersOfGroup(Group group) { 366 public List<Person> getMembersOfGroup(Group group) {
364 ArrayList<Person> members = new ArrayList<Person>(); 367 ArrayList<Person> members = new ArrayList<Person>();
365 Node gn = getActorNode(group); 368 Node gn = getActorNode(group);
366 Iterable<Relationship> rels = gn.getRelationships(RelationTypes.MEMBER_OF); 369 try (Transaction tx = graphDb.beginTx()) {
367 for (Relationship rel : rels) { 370 Iterable<Relationship> rels = gn.getRelationships(RelationTypes.MEMBER_OF);
368 Node memberNode = rel.getStartNode(); 371 for (Relationship rel : rels) {
369 Actor member = createActorFromNode(memberNode); 372 Node memberNode = rel.getStartNode();
370 // make sure we're getting a group 373 Actor member = createActorFromNode(memberNode);
371 if (!(member instanceof Person)) { 374 // make sure we're getting a group
372 logger.severe("source of MEMBER_OF is not PERSON! rel=" + rel); 375 if (!(member instanceof Person)) {
373 continue; 376 logger.severe("source of MEMBER_OF is not PERSON! rel=" + rel);
374 } 377 continue;
375 members.add((Person) member); 378 }
379 members.add((Person) member);
380 }
381 tx.success();
376 } 382 }
377 return members; 383 return members;
378 } 384 }
379 385
380 /** 386 /**
401 * @param member 407 * @param member
402 */ 408 */
403 public void deleteGroupMember(Group group, Person member) { 409 public void deleteGroupMember(Group group, Person member) {
404 Node gn = getActorNode(group); 410 Node gn = getActorNode(group);
405 Node pn = getActorNode(member); 411 Node pn = getActorNode(member);
406 Iterable<Relationship> rels = gn.getRelationships(RelationTypes.MEMBER_OF); 412 try (Transaction tx = graphDb.beginTx()) {
407 for (Relationship rel : rels) { 413 Iterable<Relationship> rels = gn.getRelationships(RelationTypes.MEMBER_OF);
408 Node mn = rel.getStartNode(); 414 for (Relationship rel : rels) {
409 if (mn.equals(pn)) { 415 Node mn = rel.getStartNode();
410 try (Transaction tx = graphDb.beginTx()) { 416 if (mn.equals(pn)) {
411 rel.delete(); 417 rel.delete();
412 tx.success();
413 } 418 }
414 // there should be only one 419 // there should be only one
415 break; 420 break;
416 } 421 }
422 tx.success();
417 } 423 }
418 } 424 }
419 425
420 /** 426 /**
421 * Returns the stored Actor matching the given one. 427 * Returns the stored Actor matching the given one.
471 if (actor.isGroup()) { 477 if (actor.isGroup()) {
472 idx = getNodeIndex(NodeTypes.GROUP); 478 idx = getNodeIndex(NodeTypes.GROUP);
473 } else { 479 } else {
474 idx = getNodeIndex(NodeTypes.PERSON); 480 idx = getNodeIndex(NodeTypes.PERSON);
475 } 481 }
476 Node actorNode = idx.get("uri", uri).getSingle(); 482 try (Transaction tx = graphDb.beginTx()) {
477 if (actorNode != null) { 483 Node actorNode = idx.get("uri", uri).getSingle();
478 // delete relations 484 if (actorNode != null) {
479 try (Transaction tx = graphDb.beginTx()) { 485 // delete relations
480 for (Relationship rel : actorNode.getRelationships()) { 486 for (Relationship rel : actorNode.getRelationships()) {
481 rel.delete(); 487 rel.delete();
482 } 488 }
483 if (!actorNode.hasRelationship()) { 489 if (!actorNode.hasRelationship()) {
484 // this shouldn't happen 490 // this shouldn't happen
485 deleteNode(actorNode); 491 deleteNode(actorNode);
486 } else { 492 } else {
487 logger.severe("deleteActor: unable to delete: Node still has relations."); 493 logger.severe("deleteActor: unable to delete: Node still has relations.");
488 } 494 }
489 tx.success(); 495 }
490 } 496 tx.success();
491 } 497 }
492 } 498 }
493 499
494 /** 500 /**
495 * Returns the Annotation with the given id. 501 * Returns the Annotation with the given id.