Changeset 34:8427930c5f88 in AnnotationManagerN4J for src/main/java/de/mpiwg/itgroup/annotations/neo4j
- Timestamp:
- Sep 25, 2012, 8:20:17 PM (13 years ago)
- Branch:
- default
- Parents:
- 33:86bb29132ba6 (diff), 31:9f653697437e (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent. - Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
src/main/java/de/mpiwg/itgroup/annotations/neo4j/AnnotationStore.java
r31 r34 5 5 6 6 import java.util.ArrayList; 7 import java.util.Arrays; 7 8 import java.util.Calendar; 8 9 import java.util.HashSet; … … 28 29 29 30 /** 31 * Neo4J based Annotation store. 32 * 30 33 * @author casties 31 34 * … … 40 43 ANNOTATION, PERSON, TARGET, GROUP, TAG 41 44 } 45 46 // types of nodes that should not be automatically deleted. 47 public Set<String> permanentNodeTypes = new HashSet<String>(Arrays.asList("PERSON", "GROUP", "TAG")); 42 48 43 49 protected List<Index<Node>> nodeIndexes; … … 85 91 } 86 92 87 88 89 93 public List<Actor> getActors(String key, String query, NodeTypes type) { 90 94 ArrayList<Actor> actors = new ArrayList<Actor>(); … … 124 128 return groups; 125 129 } 126 127 130 128 131 /** 129 132 * Returns List of Annotations. … … 174 177 } 175 178 176 177 /** 179 /** 178 180 * Returns List of Groups the person is member of. 179 181 * … … 240 242 return members; 241 243 } 242 244 243 245 /** 244 246 * Add Person newMember to Group group. … … 257 259 return addedMember; 258 260 } 259 261 260 262 /** 261 263 * Delete Person oldMember from Group group. … … 266 268 public void deleteGroupMember(Group group, Person member) { 267 269 Node gn = getActorNode(group); 270 Node pn = getActorNode(member); 268 271 Iterable<Relationship> rels = gn.getRelationships(RelationTypes.MEMBER_OF); 269 272 for (Relationship rel : rels) { 270 273 Node mn = rel.getStartNode(); 271 if (mn.equals(member)) { 272 rel.delete(); 274 if (mn.equals(pn)) { 275 Transaction tx = graphDb.beginTx(); 276 try { 277 rel.delete(); 278 tx.success(); 279 } finally { 280 tx.finish(); 281 } 273 282 // there should be only one 274 283 break; 275 284 } 276 } 277 } 278 285 } 286 } 287 279 288 /** 280 289 * Returns the stored Actor matching the given one. … … 284 293 */ 285 294 public Actor getActor(Actor actor) { 286 Node actorNode = getActorNode(actor); 287 Actor storedActor = createActorFromNode(actorNode); 288 return storedActor; 289 } 290 291 /** 292 * Stores an Actor (Person or Group). Creates a new actor Node or returns an existing one. 295 Node actorNode = getActorNode(actor); 296 Actor storedActor = createActorFromNode(actorNode); 297 return storedActor; 298 } 299 300 /** 301 * Stores an Actor (Person or Group). Creates a new actor Node or update an 302 * existing one. 293 303 * 294 304 * @param actor … … 296 306 */ 297 307 public Actor storeActor(Actor actor) { 298 Node actorNode = getOrCreateActorNode(actor); 299 Actor storedActor = createActorFromNode(actorNode); 300 return storedActor; 301 } 302 308 Node actorNode = getOrCreateActorNode(actor); 309 Transaction tx = graphDb.beginTx(); 310 try { 311 // id 312 String id = actor.getId(); 313 if (id != null) { 314 actorNode.setProperty("id", id); 315 } 316 // name 317 String name = actor.getName(); 318 if (name != null) { 319 actorNode.setProperty("name", name); 320 } 321 // uri 322 String uri = actor.getUri(); 323 if (uri != null) { 324 actorNode.setProperty("uri", uri); 325 } 326 tx.success(); 327 } finally { 328 tx.finish(); 329 } 330 Actor storedActor = createActorFromNode(actorNode); 331 return storedActor; 332 } 333 334 /** 335 * Deletes the given Actor. 336 * 337 * @param actor 338 */ 339 public void deleteActor(Actor actor) { 340 String uri = actor.getUriString(); 341 Index<Node> idx; 342 if (actor.isGroup()) { 343 idx = getNodeIndex(NodeTypes.GROUP); 344 } else { 345 idx = getNodeIndex(NodeTypes.PERSON); 346 } 347 Node actorNode = idx.get("uri", uri).getSingle(); 348 if (actorNode != null) { 349 // delete relations 350 Transaction tx = graphDb.beginTx(); 351 try { 352 for (Relationship rel : actorNode.getRelationships()) { 353 rel.delete(); 354 } 355 if (!actorNode.hasRelationship()) { 356 // this shouldn't happen 357 deleteNode(actorNode); 358 } else { 359 logger.error("deleteActor: unable to delete: Node still has relations."); 360 } 361 tx.success(); 362 } finally { 363 tx.finish(); 364 } 365 } 366 } 367 303 368 /** 304 369 * Returns the Annotation with the given id. … … 403 468 */ 404 469 protected Actor createActorFromNode(Node actorNode) { 470 if (actorNode == null) return null; 405 471 String id = (String) actorNode.getProperty("id", null); 406 472 String uri = (String) actorNode.getProperty("uri", null); … … 414 480 return null; 415 481 } 416 482 417 483 public Tag createTagFromNode(Node tagNode) { 418 String name = (String) tagNode.getProperty("name", null);419 String uri = (String) tagNode.getProperty("uri", null);420 String id = (String) tagNode.getProperty("id", null);421 422 return new Tag(id, uri, name); 423 424 } 425 484 if (tagNode == null) return null; 485 String name = (String) tagNode.getProperty("name", null); 486 String uri = (String) tagNode.getProperty("uri", null); 487 String id = (String) tagNode.getProperty("id", null); 488 489 return new Tag(id, uri, name); 490 491 } 426 492 427 493 /** … … 539 605 for (String tag : newTags) { 540 606 // create new tag 541 Node tagNode = getOrCreateTagNode(new Tag(null, null,tag));607 Node tagNode = getOrCreateTagNode(new Tag(null, null, tag)); 542 608 getOrCreateRelation(annotNode, RelationTypes.HAS_TAG, tagNode); 543 609 } … … 561 627 * @param id 562 628 */ 563 public void delete ById(String id) {629 public void deleteAnnotationById(String id) { 564 630 Node annotNode = getNodeIndex(NodeTypes.ANNOTATION).get("id", id).getSingle(); 565 631 if (annotNode != null) { … … 569 635 for (Relationship rel : annotNode.getRelationships()) { 570 636 // delete relation and the related node if it has no other 571 // relations 637 // relations and is not permanent 572 638 Node other = rel.getOtherNode(annotNode); 573 639 rel.delete(); 574 if (! other.hasRelationship()) {640 if (!(other.hasRelationship() || permanentNodeTypes.contains(other.getProperty("TYPE", null)))) { 575 641 deleteNode(other); 576 642 } … … 597 663 * @return 598 664 */ 599 public List<Annotation> search ByUriUser(String targetUri, String userUri, String limit, String offset) {665 public List<Annotation> searchAnnotationByUriUser(String targetUri, String userUri, String limit, String offset) { 600 666 List<Annotation> annotations = new ArrayList<Annotation>(); 601 667 if (targetUri != null) { … … 720 786 return person; 721 787 } 722 788 723 789 protected Node getOrCreateActorNode(Actor actor) { 724 790 // Person/Group is identified by URI or id … … 773 839 tag.setProperty("name", tagname); 774 840 idx.add(tag, "name", tagname); 775 841 776 842 tag.setProperty("id", inTag.getId()); 777 843 tag.setProperty("uri", inTag.getUri()); 778 844 idx.add(tag, "uri", inTag.getUri()); 779 845 780 846 tx.success(); 781 847 } finally { … … 804 870 if (!oldActorNode.equals(newActorNode)) { 805 871 // new admin is different 806 rel.delete(); 872 Transaction tx = graphDb.beginTx(); 873 try { 874 rel.delete(); 875 tx.success(); 876 } finally { 877 tx.finish(); 878 } 807 879 if (newActorNode != null) { 808 880 rel = getOrCreateRelation(annotNode, type, newActorNode); … … 881 953 } 882 954 883 public List<Annotation> getAnnotationsByTag(String tagUri) { 884 885 ArrayList<Annotation> ret = new ArrayList<Annotation>(); 886 Node tag = getTagNodeByUri(tagUri); 887 888 889 Iterable<Relationship> rels = tag.getRelationships(Direction.INCOMING,RelationTypes.HAS_TAG); 890 891 for (Relationship rel:rels){ 892 Node node = rel.getStartNode(); 893 ret.add(createAnnotationFromNode(node)); 894 895 } 896 return ret; 897 } 955 public List<Annotation> getAnnotationsByTag(String tagUri) { 956 957 ArrayList<Annotation> ret = new ArrayList<Annotation>(); 958 Node tag = getTagNodeByUri(tagUri); 959 960 Iterable<Relationship> rels = tag.getRelationships(Direction.INCOMING, RelationTypes.HAS_TAG); 961 962 for (Relationship rel : rels) { 963 Node node = rel.getStartNode(); 964 ret.add(createAnnotationFromNode(node)); 965 966 } 967 return ret; 968 } 898 969 899 970 } -
src/main/java/de/mpiwg/itgroup/annotations/neo4j/AnnotationStore.java
r33 r34 107 107 108 108 /** 109 * Returns List of Groups. Key has to be indexed. 109 * Returns List of Groups. 110 * Key has to be indexed. 110 111 * 111 112 * @param key … … 129 130 130 131 /** 131 * Returns List of Tags. Key has to be indexed. 132 * Returns List of Annotations. 133 * Key has to be indexed. 134 * 135 * @param key 136 * @param query 137 * @return 138 */ 139 public List<Annotation> getAnnotations(String key, String query) { 140 ArrayList<Annotation> annotations = new ArrayList<Annotation>(); 141 Index<Node> idx = getNodeIndex(NodeTypes.ANNOTATION); 142 if (key == null) { 143 key = "id"; 144 query = "*"; 145 } 146 IndexHits<Node> annotNodes = idx.query(key, query); 147 for (Node annotNode : annotNodes) { 148 Annotation annotation = createAnnotationFromNode(annotNode); 149 annotations.add(annotation); 150 } 151 return annotations; 152 } 153 154 155 156 /** 157 * Returns List of Tags. 158 * Key has to be indexed. 132 159 * 133 160 * @param key
Note: See TracChangeset
for help on using the changeset viewer.