annotate src/main/java/de/mpiwg/itgroup/annotations/neo4j/AnnotationStore.java @ 16:794077e6288c

CLOSED - # 252: Tags for Annotations https://it-dev.mpiwg-berlin.mpg.de/tracs/mpdl-project-software/ticket/252
author casties
date Tue, 04 Sep 2012 20:02:59 +0200
parents 58357a4b86de
children aafa3884b2c4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
1 /**
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
2 *
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
3 */
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
4 package de.mpiwg.itgroup.annotations.neo4j;
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
5
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
6 import java.util.ArrayList;
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
7 import java.util.Calendar;
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
8 import java.util.HashSet;
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
9 import java.util.List;
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
10 import java.util.Set;
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
11
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
12 import org.apache.log4j.Logger;
5
bbf0cc5bee29 version 0.2 really works now
casties
parents: 4
diff changeset
13 import org.neo4j.graphdb.Direction;
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
14 import org.neo4j.graphdb.GraphDatabaseService;
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
15 import org.neo4j.graphdb.Node;
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
16 import org.neo4j.graphdb.Relationship;
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
17 import org.neo4j.graphdb.RelationshipType;
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
18 import org.neo4j.graphdb.Transaction;
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
19 import org.neo4j.graphdb.index.Index;
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
20 import org.neo4j.graphdb.index.IndexHits;
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
21
9
b2bfc3bc9ba8 new internal actor class for creator.
casties
parents: 8
diff changeset
22 import de.mpiwg.itgroup.annotations.Actor;
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
23 import de.mpiwg.itgroup.annotations.Annotation;
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
24 import de.mpiwg.itgroup.annotations.Annotation.FragmentTypes;
12
5928c5d9aae8 more work on permissions...
casties
parents: 11
diff changeset
25 import de.mpiwg.itgroup.annotations.Group;
10
90911b2da322 more work on permissions...
casties
parents: 9
diff changeset
26 import de.mpiwg.itgroup.annotations.Person;
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
27
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
28 /**
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
29 * @author casties
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
30 *
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
31 */
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
32 public class AnnotationStore {
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
33
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
34 protected static Logger logger = Logger.getLogger(AnnotationStore.class);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
35
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
36 protected GraphDatabaseService graphDb;
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
37
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
38 public static enum NodeTypes {
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
39 ANNOTATION, PERSON, TARGET, GROUP, TAG
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
40 }
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
41
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
42 protected List<Index<Node>> nodeIndexes;
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
43
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
44 public static enum RelationTypes implements RelationshipType {
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
45 ANNOTATES, CREATED, PERMITS_ADMIN, PERMITS_DELETE, PERMITS_UPDATE, PERMITS_READ, MEMBER_OF, HAS_TAG
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
46 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
47
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
48 public static String ANNOTATION_URI_BASE = "http://entities.mpiwg-berlin.mpg.de/annotations/";
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
49
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
50 public AnnotationStore(GraphDatabaseService graphDb) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
51 super();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
52 this.graphDb = graphDb;
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
53 nodeIndexes = new ArrayList<Index<Node>>(5);
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
54 // List.set(enum.ordinal(), val) seems not to work.
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
55 nodeIndexes.add(NodeTypes.ANNOTATION.ordinal(), graphDb.index().forNodes("annotations"));
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
56 nodeIndexes.add(NodeTypes.PERSON.ordinal(), graphDb.index().forNodes("persons"));
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
57 nodeIndexes.add(NodeTypes.TARGET.ordinal(), graphDb.index().forNodes("targets"));
15
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
58 nodeIndexes.add(NodeTypes.GROUP.ordinal(), graphDb.index().forNodes("groups"));
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
59 nodeIndexes.add(NodeTypes.TAG.ordinal(), graphDb.index().forNodes("tags"));
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
60 }
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
61
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
62 protected Index<Node> getNodeIndex(NodeTypes type) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
63 return nodeIndexes.get(type.ordinal());
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
64 }
12
5928c5d9aae8 more work on permissions...
casties
parents: 11
diff changeset
65
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
66 /**
15
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
67 * @param userUri
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
68 * @return
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
69 */
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
70 public Node getPersonNodeByUri(String userUri) {
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
71 if (userUri == null) return null;
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
72 Node person = getNodeIndex(NodeTypes.PERSON).get("uri", userUri).getSingle();
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
73 return person;
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
74 }
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
75
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
76 /**
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
77 * Returns List of Groups the person is member of.
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
78 *
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
79 * @param person
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
80 * @return
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
81 */
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
82 public List<Group> getGroupsForPersonNode(Node person) {
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
83 ArrayList<Group> groups = new ArrayList<Group>();
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
84 Iterable<Relationship> rels = person.getRelationships(RelationTypes.MEMBER_OF);
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
85 for (Relationship rel : rels) {
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
86 Node groupNode = rel.getEndNode();
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
87 Actor group = createActorFromNode(groupNode);
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
88 // make sure we're getting a group
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
89 if (!(group instanceof Group)) {
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
90 logger.error("target of MEMBER_OF is not GROUP! rel=" + rel);
15
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
91 continue;
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
92 }
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
93 groups.add((Group) group);
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
94 }
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
95 return groups;
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
96 }
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
97
15
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
98 /**
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
99 * Returns if person with uri is in Group group.
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
100 *
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
101 * @param person
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
102 * @param group
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
103 * @return
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
104 */
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
105 public boolean isPersonInGroup(Person person, Group group) {
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
106 Node pn = getPersonNodeByUri(person.getUriString());
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
107 if (pn == null) return false;
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
108 // optimized version of getGroupsForPersonNode
15
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
109 Iterable<Relationship> rels = pn.getRelationships(RelationTypes.MEMBER_OF);
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
110 for (Relationship rel : rels) {
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
111 Node gn = rel.getEndNode();
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
112 if (gn.getProperty("uri", "").equals(group.getUriString()) || gn.getProperty("id", "").equals(group.getId())) {
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
113 return true;
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
114 }
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
115 }
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
116 return false;
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
117 }
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
118
15
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
119 /**
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
120 * Returns the Annotation with the given id.
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
121 *
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
122 * @param id
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
123 * @return
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
124 */
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
125 public Annotation getAnnotationById(String id) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
126 Node annotNode = getNodeIndex(NodeTypes.ANNOTATION).get("id", id).getSingle();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
127 Annotation annot = createAnnotationFromNode(annotNode);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
128 return annot;
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
129 }
6
6dfbe2400f64 delete annotation should work now.
casties
parents: 5
diff changeset
130
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
131 /**
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
132 * Returns an Annotation object from an annotation-Node.
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
133 *
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
134 * @param annotNode
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
135 * @return
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
136 */
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
137 public Annotation createAnnotationFromNode(Node annotNode) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
138 Annotation annot = new Annotation();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
139 annot.setUri((String) annotNode.getProperty("id", null));
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
140 annot.setBodyText((String) annotNode.getProperty("bodyText", null));
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
141 annot.setBodyUri((String) annotNode.getProperty("bodyUri", null));
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
142 /*
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
143 * get annotation target from relation
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
144 */
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
145 Relationship targetRel = getRelation(annotNode, RelationTypes.ANNOTATES, null);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
146 if (targetRel != null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
147 Node target = targetRel.getEndNode();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
148 annot.setTargetBaseUri((String) target.getProperty("uri", null));
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
149 } else {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
150 logger.error("annotation " + annotNode + " has no target node!");
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
151 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
152 annot.setTargetFragment((String) annotNode.getProperty("targetFragment", null));
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
153 String ft = (String) annotNode.getProperty("fragmentType", null);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
154 if (ft != null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
155 annot.setFragmentType(FragmentTypes.valueOf(ft));
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
156 }
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
157 /*
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
158 * get creator from relation
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
159 */
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
160 Relationship creatorRel = getRelation(annotNode, RelationTypes.CREATED, null);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
161 if (creatorRel != null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
162 Node creatorNode = creatorRel.getStartNode();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
163 Actor creator = createActorFromNode(creatorNode);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
164 annot.setCreator(creator);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
165 } else {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
166 logger.error("annotation " + annotNode + " has no creator node!");
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
167 }
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
168 /*
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
169 * get creation date
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
170 */
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
171 annot.setCreated((String) annotNode.getProperty("created", null));
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
172 /*
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
173 * get permissions
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
174 */
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
175 Relationship adminRel = getRelation(annotNode, RelationTypes.PERMITS_ADMIN, null);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
176 if (adminRel != null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
177 Node adminNode = adminRel.getEndNode();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
178 Actor admin = createActorFromNode(adminNode);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
179 annot.setAdminPermission(admin);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
180 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
181 Relationship deleteRel = getRelation(annotNode, RelationTypes.PERMITS_DELETE, null);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
182 if (deleteRel != null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
183 Node deleteNode = deleteRel.getEndNode();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
184 Actor delete = createActorFromNode(deleteNode);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
185 annot.setDeletePermission(delete);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
186 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
187 Relationship updateRel = getRelation(annotNode, RelationTypes.PERMITS_UPDATE, null);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
188 if (updateRel != null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
189 Node updateNode = updateRel.getEndNode();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
190 Actor update = createActorFromNode(updateNode);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
191 annot.setUpdatePermission(update);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
192 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
193 Relationship readRel = getRelation(annotNode, RelationTypes.PERMITS_READ, null);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
194 if (readRel != null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
195 Node readNode = readRel.getEndNode();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
196 Actor read = createActorFromNode(readNode);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
197 annot.setReadPermission(read);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
198 }
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
199 /*
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
200 * get tags
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
201 */
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
202 Set<String> tags = new HashSet<String>();
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
203 for (Relationship rel : annotNode.getRelationships(RelationTypes.HAS_TAG)) {
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
204 String tag = (String) rel.getEndNode().getProperty("name", null);
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
205 if (tag != null) {
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
206 tags.add(tag);
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
207 }
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
208 }
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
209 annot.setTags(tags);
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
210
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
211 return annot;
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
212 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
213
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
214 /**
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
215 * Returns an Actor object from a node.
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
216 *
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
217 * @param actorNode
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
218 * @return
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
219 */
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
220 protected Actor createActorFromNode(Node actorNode) {
15
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
221 String id = (String) actorNode.getProperty("id", null);
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
222 String uri = (String) actorNode.getProperty("uri", null);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
223 String name = (String) actorNode.getProperty("name", null);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
224 String type = (String) actorNode.getProperty("TYPE", null);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
225 if (type != null && type.equals("PERSON")) {
15
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
226 return new Person(id, uri, name);
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
227 } else if (type != null && type.equals("GROUP")) {
15
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
228 return new Group(id, uri, name);
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
229 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
230 return null;
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
231 }
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
232
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
233 /**
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
234 * Store a new annotation in the store or update an existing one. Returns
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
235 * the stored annotation.
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
236 *
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
237 * @param annot
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
238 * @return
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
239 */
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
240 public Annotation storeAnnotation(Annotation annot) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
241 Node annotNode = null;
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
242 Transaction tx = graphDb.beginTx();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
243 try {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
244 /*
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
245 * create or get the annotation
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
246 */
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
247 String id = annot.getUri();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
248 if (id == null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
249 id = createRessourceURI("annot:");
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
250 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
251 annotNode = getOrCreateAnnotationNode(id);
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
252
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
253 /*
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
254 * the annotation body
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
255 */
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
256 String bodyText = annot.getBodyText();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
257 if (bodyText != null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
258 annotNode.setProperty("bodyText", bodyText);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
259 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
260 String bodyUri = annot.getBodyUri();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
261 if (bodyUri != null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
262 annotNode.setProperty("bodyUri", bodyUri);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
263 }
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
264
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
265 /*
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
266 * the annotation target
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
267 */
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
268 String targetBaseUri = annot.getTargetBaseUri();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
269 if (targetBaseUri != null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
270 Node target = getOrCreateTargetNode(targetBaseUri);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
271 getOrCreateRelation(annotNode, RelationTypes.ANNOTATES, target);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
272 }
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
273
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
274 /*
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
275 * The fragment part of the annotation target.
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
276 */
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
277 String targetFragment = annot.getTargetFragment();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
278 FragmentTypes fragmentType = annot.getFragmentType();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
279 if (targetFragment != null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
280 annotNode.setProperty("targetFragment", targetFragment);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
281 annotNode.setProperty("fragmentType", fragmentType.name());
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
282 }
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
283
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
284 /*
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
285 * The creator of this annotation.
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
286 */
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
287 Actor creator = annot.getCreator();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
288 if (creator != null) {
15
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
289 Node creatorNode = getOrCreateActorNode(creator);
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
290 getOrCreateRelation(creatorNode, RelationTypes.CREATED, annotNode);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
291 }
12
5928c5d9aae8 more work on permissions...
casties
parents: 11
diff changeset
292
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
293 /*
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
294 * The creation date of this annotation.
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
295 */
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
296 String created = annot.getCreated();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
297 if (created != null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
298 annotNode.setProperty("created", created);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
299 }
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
300
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
301 /*
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
302 * Permissions for this annotation.
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
303 */
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
304 setPermissionRelation(annotNode, RelationTypes.PERMITS_ADMIN, annot.getAdminPermission());
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
305 setPermissionRelation(annotNode, RelationTypes.PERMITS_DELETE, annot.getDeletePermission());
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
306 setPermissionRelation(annotNode, RelationTypes.PERMITS_UPDATE, annot.getUpdatePermission());
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
307 setPermissionRelation(annotNode, RelationTypes.PERMITS_READ, annot.getReadPermission());
6
6dfbe2400f64 delete annotation should work now.
casties
parents: 5
diff changeset
308
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
309 /*
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
310 * Tags on this annotation.
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
311 */
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
312 Set<String> newTags = annot.getTags();
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
313 // we ignore existing tags if tags == null
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
314 if (newTags != null) {
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
315 List<Relationship> oldHasTags = new ArrayList<Relationship>();
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
316 for (Relationship rel : annotNode.getRelationships(RelationTypes.HAS_TAG)) {
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
317 oldHasTags.add(rel);
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
318 }
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
319 // adjust to new tags
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
320 if (newTags.isEmpty()) {
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
321 // remove old tags
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
322 if (!oldHasTags.isEmpty()) {
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
323 for (Relationship rel : oldHasTags) {
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
324 rel.delete();
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
325 // TODO: should we delete orphan nodes too?
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
326 }
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
327 }
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
328 } else {
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
329 if (!oldHasTags.isEmpty()) {
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
330 // adjust old tags
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
331 for (Relationship rel : oldHasTags) {
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
332 String oldTag = (String) rel.getEndNode().getProperty("name", null);
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
333 if (newTags.contains(oldTag)) {
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
334 // tag exists
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
335 newTags.remove(oldTag);
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
336 } else {
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
337 // tag exists no longer
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
338 rel.delete();
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
339 // TODO: should we delete orphan nodes too?
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
340 }
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
341 }
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
342 }
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
343 if (!newTags.isEmpty()) {
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
344 // still tags to add
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
345 for (String tag : newTags) {
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
346 // create new tag
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
347 Node tagNode = getOrCreateTagNode(tag);
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
348 getOrCreateRelation(annotNode, RelationTypes.HAS_TAG, tagNode);
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
349 }
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
350 }
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
351
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
352 }
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
353 }
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
354 tx.success();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
355 } finally {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
356 tx.finish();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
357 }
12
5928c5d9aae8 more work on permissions...
casties
parents: 11
diff changeset
358
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
359 // re-read and return annotation
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
360 Annotation storedAnnot = createAnnotationFromNode(annotNode);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
361 return storedAnnot;
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
362 }
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
363
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
364 /**
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
365 * Deletes the annotation with the given id.
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
366 *
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
367 * @param id
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
368 */
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
369 public void deleteById(String id) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
370 Node annotNode = getNodeIndex(NodeTypes.ANNOTATION).get("id", id).getSingle();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
371 if (annotNode != null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
372 // delete related objects
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
373 Transaction tx = graphDb.beginTx();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
374 try {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
375 for (Relationship rel : annotNode.getRelationships()) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
376 // delete relation and the related node if it has no other
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
377 // relations
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
378 Node other = rel.getOtherNode(annotNode);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
379 rel.delete();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
380 if (!other.hasRelationship()) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
381 deleteNode(other);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
382 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
383 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
384 if (!annotNode.hasRelationship()) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
385 deleteNode(annotNode);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
386 } else {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
387 logger.error("deleteById: unable to delete: Node still has relations.");
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
388 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
389 tx.success();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
390 } finally {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
391 tx.finish();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
392 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
393 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
394 }
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
395
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
396 /**
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
397 * Returns all annotations with the given uri and/or user.
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
398 *
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
399 * @param uri
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
400 * @param userUri
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
401 * @param limit
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
402 * @param offset
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
403 * @return
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
404 */
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
405 public List<Annotation> searchByUriUser(String targetUri, String userUri, String limit, String offset) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
406 List<Annotation> annotations = new ArrayList<Annotation>();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
407 if (targetUri != null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
408 // there should be only one
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
409 Node target = getNodeIndex(NodeTypes.TARGET).get("uri", targetUri).getSingle();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
410 if (target != null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
411 Iterable<Relationship> relations = target.getRelationships(RelationTypes.ANNOTATES);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
412 for (Relationship relation : relations) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
413 Node ann = relation.getStartNode();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
414 if (ann.getProperty("TYPE", "").equals("ANNOTATION")) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
415 Annotation annot = createAnnotationFromNode(ann);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
416 annotations.add(annot);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
417 } else {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
418 logger.error("ANNOTATES relation does not start with ANNOTATION: " + ann);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
419 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
420 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
421 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
422 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
423 if (userUri != null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
424 // there should be only one
15
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
425 Node person = getPersonNodeByUri(userUri);
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
426 if (person != null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
427 Iterable<Relationship> relations = person.getRelationships(RelationTypes.CREATED);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
428 for (Relationship relation : relations) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
429 Node ann = relation.getEndNode();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
430 if (ann.getProperty("TYPE", "").equals("ANNOTATION")) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
431 Annotation annot = createAnnotationFromNode(ann);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
432 annotations.add(annot);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
433 } else {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
434 logger.error("CREATED relation does not end with ANNOTATION: " + ann);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
435 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
436 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
437 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
438 }
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
439 // TODO: if both uri and user are given we should intersect
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
440 return annotations;
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
441 }
5
bbf0cc5bee29 version 0.2 really works now
casties
parents: 4
diff changeset
442
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
443 /**
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
444 * Returns Relationship of type from Node start to Node end. Creates one if
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
445 * it doesn't exist.
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
446 *
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
447 * @param start
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
448 * @param type
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
449 * @param end
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
450 * @return
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
451 */
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
452 protected Relationship getOrCreateRelation(Node start, RelationshipType type, Node end) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
453 if (start.hasRelationship()) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
454 // there are relations
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
455 Iterable<Relationship> rels = start.getRelationships(type, Direction.OUTGOING);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
456 for (Relationship rel : rels) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
457 if (rel.getEndNode().equals(end)) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
458 // relation exists
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
459 return rel;
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
460 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
461 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
462 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
463 // create new one
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
464 Relationship rel;
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
465 Transaction tx = graphDb.beginTx();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
466 try {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
467 rel = start.createRelationshipTo(end, type);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
468 tx.success();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
469 } finally {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
470 tx.finish();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
471 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
472 return rel;
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
473 }
12
5928c5d9aae8 more work on permissions...
casties
parents: 11
diff changeset
474
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
475 protected Node getOrCreateAnnotationNode(String id) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
476 Index<Node> idx = getNodeIndex(NodeTypes.ANNOTATION);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
477 IndexHits<Node> annotations = idx.get("id", id);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
478 Node annotation = annotations.getSingle();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
479 if (annotation == null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
480 // does not exist yet
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
481 Transaction tx = graphDb.beginTx();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
482 try {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
483 annotation = graphDb.createNode();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
484 annotation.setProperty("TYPE", NodeTypes.ANNOTATION.name());
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
485 annotation.setProperty("id", id);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
486 idx.add(annotation, "id", id);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
487 tx.success();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
488 } finally {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
489 tx.finish();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
490 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
491 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
492 return annotation;
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
493 }
6
6dfbe2400f64 delete annotation should work now.
casties
parents: 5
diff changeset
494
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
495 protected Node getOrCreateTargetNode(String uri) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
496 Index<Node> idx = getNodeIndex(NodeTypes.TARGET);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
497 IndexHits<Node> targets = idx.get("uri", uri);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
498 Node target = targets.getSingle();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
499 if (target == null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
500 // does not exist yet
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
501 Transaction tx = graphDb.beginTx();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
502 try {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
503 target = graphDb.createNode();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
504 target.setProperty("TYPE", NodeTypes.TARGET.name());
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
505 target.setProperty("uri", uri);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
506 idx.add(target, "uri", uri);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
507 tx.success();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
508 } finally {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
509 tx.finish();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
510 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
511 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
512 return target;
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
513 }
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
514
15
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
515 protected Node getOrCreateActorNode(Actor actor) {
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
516 // Person/Group is identified by URI or id
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
517 String uri = actor.getUriString();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
518 String name = actor.getName();
15
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
519 String id = actor.getId();
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
520 Index<Node> idx;
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
521 if (actor.isGroup()) {
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
522 idx = getNodeIndex(NodeTypes.GROUP);
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
523 } else {
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
524 idx = getNodeIndex(NodeTypes.PERSON);
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
525 }
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
526 IndexHits<Node> persons = idx.get("uri", uri);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
527 Node person = persons.getSingle();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
528 if (person == null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
529 // does not exist yet
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
530 Transaction tx = graphDb.beginTx();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
531 try {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
532 person = graphDb.createNode();
15
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
533 if (actor.isGroup()) {
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
534 person.setProperty("TYPE", NodeTypes.GROUP.name());
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
535 } else {
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
536 person.setProperty("TYPE", NodeTypes.PERSON.name());
15
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
537 }
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
538 person.setProperty("uri", uri);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
539 idx.add(person, "uri", uri);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
540 if (name != null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
541 person.setProperty("name", name);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
542 }
15
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
543 if (id != null) {
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
544 person.setProperty("id", id);
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
545 }
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
546 tx.success();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
547 } finally {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
548 tx.finish();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
549 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
550 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
551 return person;
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
552 }
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
553
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
554 protected Node getOrCreateTagNode(String tagname) {
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
555 Index<Node> idx = getNodeIndex(NodeTypes.TAG);
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
556 IndexHits<Node> tags = idx.get("name", tagname);
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
557 Node tag = tags.getSingle();
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
558 if (tag == null) {
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
559 // does not exist yet
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
560 Transaction tx = graphDb.beginTx();
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
561 try {
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
562 tag = graphDb.createNode();
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
563 tag.setProperty("TYPE", NodeTypes.TAG.name());
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
564 tag.setProperty("name", tagname);
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
565 idx.add(tag, "name", tagname);
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
566 tx.success();
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
567 } finally {
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
568 tx.finish();
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
569 }
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
570 }
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
571 return tag;
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
572 }
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
573
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
574 /**
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
575 * Create or update permissions relations for an annotation.
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
576 *
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
577 * @param annotNode
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
578 * @param type
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
579 * @param annot
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
580 */
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
581 protected void setPermissionRelation(Node annotNode, RelationTypes type, Actor actor) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
582 Node newActorNode = null;
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
583 if (actor != null) {
15
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
584 newActorNode = getOrCreateActorNode(actor);
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
585 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
586 Relationship rel = getRelation(annotNode, type, null);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
587 if (rel != null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
588 // relation exists
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
589 Node oldActorNode = rel.getEndNode();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
590 if (!oldActorNode.equals(newActorNode)) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
591 // new admin is different
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
592 rel.delete();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
593 if (newActorNode != null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
594 rel = getOrCreateRelation(annotNode, type, newActorNode);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
595 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
596 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
597 } else {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
598 // no relation yet
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
599 if (newActorNode != null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
600 rel = getOrCreateRelation(annotNode, type, newActorNode);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
601 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
602 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
603 }
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
604
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
605 /**
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
606 * Unindexes and deletes given Node if it has no relations.
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
607 *
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
608 * @param node
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
609 */
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
610 protected void deleteNode(Node node) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
611 Transaction tx = graphDb.beginTx();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
612 try {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
613 if (node.hasRelationship()) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
614 logger.error("deleteNode: unable to delete: Node still has relations.");
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
615 } else {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
616 String ts = (String) node.getProperty("TYPE", null);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
617 try {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
618 NodeTypes type = NodeTypes.valueOf(ts);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
619 getNodeIndex(type).remove(node);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
620 } catch (Exception e) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
621 logger.error("deleteNode: unable to get TYPE of node: " + node);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
622 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
623 node.delete();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
624 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
625 tx.success();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
626 } finally {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
627 tx.finish();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
628 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
629 }
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
630
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
631 /**
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
632 * returns the (first) Relationship of RelationTypes type from Node start.
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
633 *
15
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
634 * @param start
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
635 * @param type
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
636 * @param direction
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
637 * @return
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
638 */
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
639 protected Relationship getRelation(Node start, RelationTypes type, Direction direction) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
640 Iterable<Relationship> rels;
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
641 if (direction == null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
642 // ignore direction
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
643 rels = start.getRelationships(type);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
644 } else {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
645 rels = start.getRelationships(type, direction);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
646 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
647 for (Relationship rel : rels) {
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
648 // just the first one
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
649 return rel;
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
650 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
651 return null;
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
652 }
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
653
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
654 /**
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
655 * Erzeuge eine urn aus der aktuellen Zeit in millis
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
656 *
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
657 * @return
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
658 */
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
659 private String createRessourceURI(String prefix) {
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
660
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
661 Calendar cal = Calendar.getInstance();
12
5928c5d9aae8 more work on permissions...
casties
parents: 11
diff changeset
662
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
663 long time = cal.getTimeInMillis();
12
5928c5d9aae8 more work on permissions...
casties
parents: 11
diff changeset
664
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
665 return String.format("%s%s%s", ANNOTATION_URI_BASE, prefix, time);
12
5928c5d9aae8 more work on permissions...
casties
parents: 11
diff changeset
666
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
667 }
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
668
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
669 }