annotate src/main/java/de/mpiwg/itgroup/annotations/neo4j/AnnotationStore.java @ 36:0fdb05f35139

new node type "resource" for base documents (sans page number).
author casties
date Wed, 26 Sep 2012 11:47:38 +0200
parents 8427930c5f88
children 03e0f7574224
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;
32
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
7 import java.util.Arrays;
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
8 import java.util.Calendar;
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
9 import java.util.HashSet;
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
10 import java.util.List;
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
11 import java.util.Set;
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
12
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
13 import org.apache.log4j.Logger;
5
bbf0cc5bee29 version 0.2 really works now
casties
parents: 4
diff changeset
14 import org.neo4j.graphdb.Direction;
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
15 import org.neo4j.graphdb.GraphDatabaseService;
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
16 import org.neo4j.graphdb.Node;
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
17 import org.neo4j.graphdb.Relationship;
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
18 import org.neo4j.graphdb.RelationshipType;
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
19 import org.neo4j.graphdb.Transaction;
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
20 import org.neo4j.graphdb.index.Index;
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
21 import org.neo4j.graphdb.index.IndexHits;
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
22
9
b2bfc3bc9ba8 new internal actor class for creator.
casties
parents: 8
diff changeset
23 import de.mpiwg.itgroup.annotations.Actor;
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
24 import de.mpiwg.itgroup.annotations.Annotation;
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
25 import de.mpiwg.itgroup.annotations.Annotation.FragmentTypes;
12
5928c5d9aae8 more work on permissions...
casties
parents: 11
diff changeset
26 import de.mpiwg.itgroup.annotations.Group;
10
90911b2da322 more work on permissions...
casties
parents: 9
diff changeset
27 import de.mpiwg.itgroup.annotations.Person;
28
f4ed2ed33e5b Restinterface zur Anzeige von Tags hinzugefuegt-
dwinter
parents: 24
diff changeset
28 import de.mpiwg.itgroup.annotations.Tag;
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
29
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
30 /**
32
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
31 * Neo4J based Annotation store.
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
32 *
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
33 * @author casties
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
34 *
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
35 */
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
36 public class AnnotationStore {
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 protected static Logger logger = Logger.getLogger(AnnotationStore.class);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
39
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
40 protected GraphDatabaseService graphDb;
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 public static enum NodeTypes {
36
0fdb05f35139 new node type "resource" for base documents (sans page number).
casties
parents: 34
diff changeset
43 ANNOTATION, PERSON, TARGET, GROUP, TAG, RESOURCE
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
44 }
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
45
32
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
46 // types of nodes that should not be automatically deleted.
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
47 public Set<String> permanentNodeTypes = new HashSet<String>(Arrays.asList("PERSON", "GROUP", "TAG"));
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
48
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
49 protected List<Index<Node>> nodeIndexes;
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
50
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
51 public static enum RelationTypes implements RelationshipType {
36
0fdb05f35139 new node type "resource" for base documents (sans page number).
casties
parents: 34
diff changeset
52 ANNOTATES, CREATED, PERMITS_ADMIN, PERMITS_DELETE, PERMITS_UPDATE, PERMITS_READ, MEMBER_OF, HAS_TAG, PART_OF
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
53 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
54
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
55 public static String ANNOTATION_URI_BASE = "http://entities.mpiwg-berlin.mpg.de/annotations/";
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
56
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
57 public AnnotationStore(GraphDatabaseService graphDb) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
58 super();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
59 this.graphDb = graphDb;
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
60 nodeIndexes = new ArrayList<Index<Node>>(5);
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
61 // List.set(enum.ordinal(), val) seems not to work.
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
62 nodeIndexes.add(NodeTypes.ANNOTATION.ordinal(), graphDb.index().forNodes("annotations"));
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
63 nodeIndexes.add(NodeTypes.PERSON.ordinal(), graphDb.index().forNodes("persons"));
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
64 nodeIndexes.add(NodeTypes.TARGET.ordinal(), graphDb.index().forNodes("targets"));
15
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
65 nodeIndexes.add(NodeTypes.GROUP.ordinal(), graphDb.index().forNodes("groups"));
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
66 nodeIndexes.add(NodeTypes.TAG.ordinal(), graphDb.index().forNodes("tags"));
36
0fdb05f35139 new node type "resource" for base documents (sans page number).
casties
parents: 34
diff changeset
67 nodeIndexes.add(NodeTypes.RESOURCE.ordinal(), graphDb.index().forNodes("resources"));
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
68 }
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
69
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
70 protected Index<Node> getNodeIndex(NodeTypes type) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
71 return nodeIndexes.get(type.ordinal());
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
72 }
12
5928c5d9aae8 more work on permissions...
casties
parents: 11
diff changeset
73
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
74 /**
15
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
75 * @param userUri
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
76 * @return
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
77 */
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
78 public Node getPersonNodeByUri(String userUri) {
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
79 if (userUri == null) return null;
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
80 Node person = getNodeIndex(NodeTypes.PERSON).get("uri", userUri).getSingle();
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
81 return person;
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
82 }
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
83
28
f4ed2ed33e5b Restinterface zur Anzeige von Tags hinzugefuegt-
dwinter
parents: 24
diff changeset
84 /**
f4ed2ed33e5b Restinterface zur Anzeige von Tags hinzugefuegt-
dwinter
parents: 24
diff changeset
85 * @param tagUri
f4ed2ed33e5b Restinterface zur Anzeige von Tags hinzugefuegt-
dwinter
parents: 24
diff changeset
86 * @return
f4ed2ed33e5b Restinterface zur Anzeige von Tags hinzugefuegt-
dwinter
parents: 24
diff changeset
87 */
f4ed2ed33e5b Restinterface zur Anzeige von Tags hinzugefuegt-
dwinter
parents: 24
diff changeset
88 public Node getTagNodeByUri(String tagUri) {
f4ed2ed33e5b Restinterface zur Anzeige von Tags hinzugefuegt-
dwinter
parents: 24
diff changeset
89 if (tagUri == null) return null;
f4ed2ed33e5b Restinterface zur Anzeige von Tags hinzugefuegt-
dwinter
parents: 24
diff changeset
90 Node person = getNodeIndex(NodeTypes.TAG).get("uri", tagUri).getSingle();
f4ed2ed33e5b Restinterface zur Anzeige von Tags hinzugefuegt-
dwinter
parents: 24
diff changeset
91 return person;
f4ed2ed33e5b Restinterface zur Anzeige von Tags hinzugefuegt-
dwinter
parents: 24
diff changeset
92 }
f4ed2ed33e5b Restinterface zur Anzeige von Tags hinzugefuegt-
dwinter
parents: 24
diff changeset
93
24
e208a7b1a37a more work on groups ui.
casties
parents: 22
diff changeset
94 public List<Actor> getActors(String key, String query, NodeTypes type) {
e208a7b1a37a more work on groups ui.
casties
parents: 22
diff changeset
95 ArrayList<Actor> actors = new ArrayList<Actor>();
e208a7b1a37a more work on groups ui.
casties
parents: 22
diff changeset
96 Index<Node> idx = getNodeIndex(type);
e208a7b1a37a more work on groups ui.
casties
parents: 22
diff changeset
97 if (key == null) {
e208a7b1a37a more work on groups ui.
casties
parents: 22
diff changeset
98 key = "uri";
e208a7b1a37a more work on groups ui.
casties
parents: 22
diff changeset
99 query = "*";
e208a7b1a37a more work on groups ui.
casties
parents: 22
diff changeset
100 }
e208a7b1a37a more work on groups ui.
casties
parents: 22
diff changeset
101 IndexHits<Node> actorNodes = idx.query(key, query);
e208a7b1a37a more work on groups ui.
casties
parents: 22
diff changeset
102 for (Node actorNode : actorNodes) {
e208a7b1a37a more work on groups ui.
casties
parents: 22
diff changeset
103 Actor actor = createActorFromNode(actorNode);
e208a7b1a37a more work on groups ui.
casties
parents: 22
diff changeset
104 actors.add(actor);
e208a7b1a37a more work on groups ui.
casties
parents: 22
diff changeset
105 }
e208a7b1a37a more work on groups ui.
casties
parents: 22
diff changeset
106 return actors;
e208a7b1a37a more work on groups ui.
casties
parents: 22
diff changeset
107 }
e208a7b1a37a more work on groups ui.
casties
parents: 22
diff changeset
108
15
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
109 /**
18
aafa3884b2c4 new AnnotationStore restlet for HTML-UI.
casties
parents: 16
diff changeset
110 * Returns List of Groups.
19
f0f55ab768c9 more work on HTML UI.
casties
parents: 18
diff changeset
111 * Key has to be indexed.
18
aafa3884b2c4 new AnnotationStore restlet for HTML-UI.
casties
parents: 16
diff changeset
112 *
19
f0f55ab768c9 more work on HTML UI.
casties
parents: 18
diff changeset
113 * @param key
f0f55ab768c9 more work on HTML UI.
casties
parents: 18
diff changeset
114 * @param query
18
aafa3884b2c4 new AnnotationStore restlet for HTML-UI.
casties
parents: 16
diff changeset
115 * @return
aafa3884b2c4 new AnnotationStore restlet for HTML-UI.
casties
parents: 16
diff changeset
116 */
19
f0f55ab768c9 more work on HTML UI.
casties
parents: 18
diff changeset
117 public List<Group> getGroups(String key, String query) {
18
aafa3884b2c4 new AnnotationStore restlet for HTML-UI.
casties
parents: 16
diff changeset
118 ArrayList<Group> groups = new ArrayList<Group>();
aafa3884b2c4 new AnnotationStore restlet for HTML-UI.
casties
parents: 16
diff changeset
119 Index<Node> idx = getNodeIndex(NodeTypes.GROUP);
19
f0f55ab768c9 more work on HTML UI.
casties
parents: 18
diff changeset
120 if (key == null) {
f0f55ab768c9 more work on HTML UI.
casties
parents: 18
diff changeset
121 key = "uri";
f0f55ab768c9 more work on HTML UI.
casties
parents: 18
diff changeset
122 query = "*";
f0f55ab768c9 more work on HTML UI.
casties
parents: 18
diff changeset
123 }
f0f55ab768c9 more work on HTML UI.
casties
parents: 18
diff changeset
124 IndexHits<Node> groupNodes = idx.query(key, query);
18
aafa3884b2c4 new AnnotationStore restlet for HTML-UI.
casties
parents: 16
diff changeset
125 for (Node groupNode : groupNodes) {
aafa3884b2c4 new AnnotationStore restlet for HTML-UI.
casties
parents: 16
diff changeset
126 Actor group = createActorFromNode(groupNode);
aafa3884b2c4 new AnnotationStore restlet for HTML-UI.
casties
parents: 16
diff changeset
127 groups.add((Group) group);
aafa3884b2c4 new AnnotationStore restlet for HTML-UI.
casties
parents: 16
diff changeset
128 }
aafa3884b2c4 new AnnotationStore restlet for HTML-UI.
casties
parents: 16
diff changeset
129 return groups;
aafa3884b2c4 new AnnotationStore restlet for HTML-UI.
casties
parents: 16
diff changeset
130 }
32
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
131
28
f4ed2ed33e5b Restinterface zur Anzeige von Tags hinzugefuegt-
dwinter
parents: 24
diff changeset
132 /**
31
9f653697437e annotationbrowser
dwinter
parents: 29
diff changeset
133 * Returns List of Annotations.
9f653697437e annotationbrowser
dwinter
parents: 29
diff changeset
134 * Key has to be indexed.
9f653697437e annotationbrowser
dwinter
parents: 29
diff changeset
135 *
9f653697437e annotationbrowser
dwinter
parents: 29
diff changeset
136 * @param key
9f653697437e annotationbrowser
dwinter
parents: 29
diff changeset
137 * @param query
9f653697437e annotationbrowser
dwinter
parents: 29
diff changeset
138 * @return
9f653697437e annotationbrowser
dwinter
parents: 29
diff changeset
139 */
9f653697437e annotationbrowser
dwinter
parents: 29
diff changeset
140 public List<Annotation> getAnnotations(String key, String query) {
9f653697437e annotationbrowser
dwinter
parents: 29
diff changeset
141 ArrayList<Annotation> annotations = new ArrayList<Annotation>();
9f653697437e annotationbrowser
dwinter
parents: 29
diff changeset
142 Index<Node> idx = getNodeIndex(NodeTypes.ANNOTATION);
9f653697437e annotationbrowser
dwinter
parents: 29
diff changeset
143 if (key == null) {
9f653697437e annotationbrowser
dwinter
parents: 29
diff changeset
144 key = "id";
9f653697437e annotationbrowser
dwinter
parents: 29
diff changeset
145 query = "*";
9f653697437e annotationbrowser
dwinter
parents: 29
diff changeset
146 }
9f653697437e annotationbrowser
dwinter
parents: 29
diff changeset
147 IndexHits<Node> annotNodes = idx.query(key, query);
9f653697437e annotationbrowser
dwinter
parents: 29
diff changeset
148 for (Node annotNode : annotNodes) {
9f653697437e annotationbrowser
dwinter
parents: 29
diff changeset
149 Annotation annotation = createAnnotationFromNode(annotNode);
9f653697437e annotationbrowser
dwinter
parents: 29
diff changeset
150 annotations.add(annotation);
9f653697437e annotationbrowser
dwinter
parents: 29
diff changeset
151 }
9f653697437e annotationbrowser
dwinter
parents: 29
diff changeset
152 return annotations;
9f653697437e annotationbrowser
dwinter
parents: 29
diff changeset
153 }
9f653697437e annotationbrowser
dwinter
parents: 29
diff changeset
154
9f653697437e annotationbrowser
dwinter
parents: 29
diff changeset
155
9f653697437e annotationbrowser
dwinter
parents: 29
diff changeset
156
9f653697437e annotationbrowser
dwinter
parents: 29
diff changeset
157 /**
28
f4ed2ed33e5b Restinterface zur Anzeige von Tags hinzugefuegt-
dwinter
parents: 24
diff changeset
158 * Returns List of Tags.
f4ed2ed33e5b Restinterface zur Anzeige von Tags hinzugefuegt-
dwinter
parents: 24
diff changeset
159 * Key has to be indexed.
f4ed2ed33e5b Restinterface zur Anzeige von Tags hinzugefuegt-
dwinter
parents: 24
diff changeset
160 *
f4ed2ed33e5b Restinterface zur Anzeige von Tags hinzugefuegt-
dwinter
parents: 24
diff changeset
161 * @param key
f4ed2ed33e5b Restinterface zur Anzeige von Tags hinzugefuegt-
dwinter
parents: 24
diff changeset
162 * @param query
f4ed2ed33e5b Restinterface zur Anzeige von Tags hinzugefuegt-
dwinter
parents: 24
diff changeset
163 * @return
f4ed2ed33e5b Restinterface zur Anzeige von Tags hinzugefuegt-
dwinter
parents: 24
diff changeset
164 */
f4ed2ed33e5b Restinterface zur Anzeige von Tags hinzugefuegt-
dwinter
parents: 24
diff changeset
165 public List<Tag> getTags(String key, String query) {
f4ed2ed33e5b Restinterface zur Anzeige von Tags hinzugefuegt-
dwinter
parents: 24
diff changeset
166 ArrayList<Tag> tags = new ArrayList<Tag>();
f4ed2ed33e5b Restinterface zur Anzeige von Tags hinzugefuegt-
dwinter
parents: 24
diff changeset
167 Index<Node> idx = getNodeIndex(NodeTypes.TAG);
f4ed2ed33e5b Restinterface zur Anzeige von Tags hinzugefuegt-
dwinter
parents: 24
diff changeset
168 if (key == null) {
f4ed2ed33e5b Restinterface zur Anzeige von Tags hinzugefuegt-
dwinter
parents: 24
diff changeset
169 key = "uri";
f4ed2ed33e5b Restinterface zur Anzeige von Tags hinzugefuegt-
dwinter
parents: 24
diff changeset
170 query = "*";
f4ed2ed33e5b Restinterface zur Anzeige von Tags hinzugefuegt-
dwinter
parents: 24
diff changeset
171 }
f4ed2ed33e5b Restinterface zur Anzeige von Tags hinzugefuegt-
dwinter
parents: 24
diff changeset
172 IndexHits<Node> groupNodes = idx.query(key, query);
f4ed2ed33e5b Restinterface zur Anzeige von Tags hinzugefuegt-
dwinter
parents: 24
diff changeset
173 for (Node groupNode : groupNodes) {
f4ed2ed33e5b Restinterface zur Anzeige von Tags hinzugefuegt-
dwinter
parents: 24
diff changeset
174 Tag tag = createTagFromNode(groupNode);
f4ed2ed33e5b Restinterface zur Anzeige von Tags hinzugefuegt-
dwinter
parents: 24
diff changeset
175 tags.add(tag);
f4ed2ed33e5b Restinterface zur Anzeige von Tags hinzugefuegt-
dwinter
parents: 24
diff changeset
176 }
f4ed2ed33e5b Restinterface zur Anzeige von Tags hinzugefuegt-
dwinter
parents: 24
diff changeset
177 return tags;
f4ed2ed33e5b Restinterface zur Anzeige von Tags hinzugefuegt-
dwinter
parents: 24
diff changeset
178 }
18
aafa3884b2c4 new AnnotationStore restlet for HTML-UI.
casties
parents: 16
diff changeset
179
32
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
180 /**
15
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
181 * Returns List of Groups the person is member of.
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
182 *
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
183 * @param person
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
184 * @return
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
185 */
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
186 public List<Group> getGroupsForPersonNode(Node person) {
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
187 ArrayList<Group> groups = new ArrayList<Group>();
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
188 Iterable<Relationship> rels = person.getRelationships(RelationTypes.MEMBER_OF);
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
189 for (Relationship rel : rels) {
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
190 Node groupNode = rel.getEndNode();
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
191 Actor group = createActorFromNode(groupNode);
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
192 // make sure we're getting a group
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
193 if (!(group instanceof Group)) {
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
194 logger.error("target of MEMBER_OF is not GROUP! rel=" + rel);
15
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
195 continue;
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
196 }
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
197 groups.add((Group) group);
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
198 }
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
199 return groups;
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
200 }
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
201
15
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
202 /**
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
203 * Returns if person with uri is in Group group.
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
204 *
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
205 * @param person
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
206 * @param group
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
207 * @return
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
208 */
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
209 public boolean isPersonInGroup(Person person, Group group) {
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
210 Node pn = getPersonNodeByUri(person.getUriString());
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
211 if (pn == null) return false;
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
212 // optimized version of getGroupsForPersonNode
15
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
213 Iterable<Relationship> rels = pn.getRelationships(RelationTypes.MEMBER_OF);
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
214 for (Relationship rel : rels) {
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
215 Node gn = rel.getEndNode();
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
216 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
217 return true;
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
218 }
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
219 }
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
220 return false;
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
221 }
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
222
15
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
223 /**
22
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
224 * Returns the members of the group.
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
225 *
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
226 * @param group
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
227 * @return
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
228 */
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
229 public List<Person> getMembersOfGroup(Group group) {
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
230 ArrayList<Person> members = new ArrayList<Person>();
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
231 Node gn = getActorNode(group);
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
232 Iterable<Relationship> rels = gn.getRelationships(RelationTypes.MEMBER_OF);
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
233 for (Relationship rel : rels) {
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
234 Node memberNode = rel.getStartNode();
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
235 Actor member = createActorFromNode(memberNode);
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
236 // make sure we're getting a group
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
237 if (!(member instanceof Person)) {
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
238 logger.error("source of MEMBER_OF is not PERSON! rel=" + rel);
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
239 continue;
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
240 }
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
241 members.add((Person) member);
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
242 }
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
243 return members;
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
244 }
32
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
245
22
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
246 /**
25
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
247 * Add Person newMember to Group group.
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
248 *
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
249 * @param group
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
250 * @param member
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
251 */
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
252 public Person addGroupMember(Group group, Person member) {
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
253 Node gn = getActorNode(group);
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
254 Node pn = getActorNode(member);
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
255 Person addedMember = null;
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
256 if (gn != null && pn != null) {
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
257 getOrCreateRelation(pn, RelationTypes.MEMBER_OF, gn);
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
258 addedMember = member;
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
259 }
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
260 return addedMember;
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
261 }
32
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
262
25
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
263 /**
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
264 * Delete Person oldMember from Group group.
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
265 *
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
266 * @param group
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
267 * @param member
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
268 */
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
269 public void deleteGroupMember(Group group, Person member) {
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
270 Node gn = getActorNode(group);
32
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
271 Node pn = getActorNode(member);
25
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
272 Iterable<Relationship> rels = gn.getRelationships(RelationTypes.MEMBER_OF);
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
273 for (Relationship rel : rels) {
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
274 Node mn = rel.getStartNode();
32
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
275 if (mn.equals(pn)) {
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
276 Transaction tx = graphDb.beginTx();
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
277 try {
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
278 rel.delete();
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
279 tx.success();
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
280 } finally {
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
281 tx.finish();
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
282 }
25
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
283 // there should be only one
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
284 break;
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
285 }
32
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
286 }
25
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
287 }
32
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
288
25
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
289 /**
22
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
290 * Returns the stored Actor matching the given one.
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
291 *
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
292 * @param actor
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
293 * @return
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
294 */
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
295 public Actor getActor(Actor actor) {
32
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
296 Node actorNode = getActorNode(actor);
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
297 Actor storedActor = createActorFromNode(actorNode);
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
298 return storedActor;
22
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
299 }
32
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
300
22
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
301 /**
32
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
302 * Stores an Actor (Person or Group). Creates a new actor Node or update an
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
303 * existing one.
22
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
304 *
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
305 * @param actor
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
306 * @return
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
307 */
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
308 public Actor storeActor(Actor actor) {
32
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
309 Node actorNode = getOrCreateActorNode(actor);
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
310 Transaction tx = graphDb.beginTx();
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
311 try {
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
312 // id
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
313 String id = actor.getId();
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
314 if (id != null) {
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
315 actorNode.setProperty("id", id);
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
316 }
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
317 // name
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
318 String name = actor.getName();
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
319 if (name != null) {
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
320 actorNode.setProperty("name", name);
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
321 }
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
322 // uri
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
323 String uri = actor.getUri();
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
324 if (uri != null) {
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
325 actorNode.setProperty("uri", uri);
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
326 }
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
327 tx.success();
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
328 } finally {
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
329 tx.finish();
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
330 }
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
331 Actor storedActor = createActorFromNode(actorNode);
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
332 return storedActor;
22
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
333 }
32
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
334
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
335 /**
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
336 * Deletes the given Actor.
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
337 *
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
338 * @param actor
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
339 */
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
340 public void deleteActor(Actor actor) {
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
341 String uri = actor.getUriString();
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
342 Index<Node> idx;
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
343 if (actor.isGroup()) {
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
344 idx = getNodeIndex(NodeTypes.GROUP);
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
345 } else {
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
346 idx = getNodeIndex(NodeTypes.PERSON);
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
347 }
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
348 Node actorNode = idx.get("uri", uri).getSingle();
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
349 if (actorNode != null) {
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
350 // delete relations
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
351 Transaction tx = graphDb.beginTx();
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
352 try {
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
353 for (Relationship rel : actorNode.getRelationships()) {
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
354 rel.delete();
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
355 }
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
356 if (!actorNode.hasRelationship()) {
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
357 // this shouldn't happen
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
358 deleteNode(actorNode);
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
359 } else {
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
360 logger.error("deleteActor: unable to delete: Node still has relations.");
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
361 }
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
362 tx.success();
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
363 } finally {
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
364 tx.finish();
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
365 }
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
366 }
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
367 }
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
368
22
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
369 /**
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
370 * Returns the Annotation with the given id.
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
371 *
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
372 * @param id
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
373 * @return
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
374 */
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
375 public Annotation getAnnotationById(String id) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
376 Node annotNode = getNodeIndex(NodeTypes.ANNOTATION).get("id", id).getSingle();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
377 Annotation annot = createAnnotationFromNode(annotNode);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
378 return annot;
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
379 }
6
6dfbe2400f64 delete annotation should work now.
casties
parents: 5
diff changeset
380
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
381 /**
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
382 * Returns an Annotation object from an annotation-Node.
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 * @param annotNode
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
385 * @return
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
386 */
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
387 public Annotation createAnnotationFromNode(Node annotNode) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
388 Annotation annot = new Annotation();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
389 annot.setUri((String) annotNode.getProperty("id", null));
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
390 annot.setBodyText((String) annotNode.getProperty("bodyText", null));
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
391 annot.setBodyUri((String) annotNode.getProperty("bodyUri", null));
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
392 /*
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
393 * get annotation target from relation
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
394 */
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
395 Relationship targetRel = getRelation(annotNode, RelationTypes.ANNOTATES, null);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
396 if (targetRel != null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
397 Node target = targetRel.getEndNode();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
398 annot.setTargetBaseUri((String) target.getProperty("uri", null));
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
399 } else {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
400 logger.error("annotation " + annotNode + " has no target node!");
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
401 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
402 annot.setTargetFragment((String) annotNode.getProperty("targetFragment", null));
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
403 String ft = (String) annotNode.getProperty("fragmentType", null);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
404 if (ft != null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
405 annot.setFragmentType(FragmentTypes.valueOf(ft));
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
406 }
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
407 /*
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
408 * get creator from relation
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
409 */
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
410 Relationship creatorRel = getRelation(annotNode, RelationTypes.CREATED, null);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
411 if (creatorRel != null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
412 Node creatorNode = creatorRel.getStartNode();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
413 Actor creator = createActorFromNode(creatorNode);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
414 annot.setCreator(creator);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
415 } else {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
416 logger.error("annotation " + annotNode + " has no creator node!");
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
417 }
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
418 /*
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
419 * get creation date
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
420 */
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
421 annot.setCreated((String) annotNode.getProperty("created", null));
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
422 /*
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
423 * get permissions
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
424 */
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
425 Relationship adminRel = getRelation(annotNode, RelationTypes.PERMITS_ADMIN, null);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
426 if (adminRel != null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
427 Node adminNode = adminRel.getEndNode();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
428 Actor admin = createActorFromNode(adminNode);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
429 annot.setAdminPermission(admin);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
430 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
431 Relationship deleteRel = getRelation(annotNode, RelationTypes.PERMITS_DELETE, null);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
432 if (deleteRel != null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
433 Node deleteNode = deleteRel.getEndNode();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
434 Actor delete = createActorFromNode(deleteNode);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
435 annot.setDeletePermission(delete);
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 Relationship updateRel = getRelation(annotNode, RelationTypes.PERMITS_UPDATE, null);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
438 if (updateRel != null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
439 Node updateNode = updateRel.getEndNode();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
440 Actor update = createActorFromNode(updateNode);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
441 annot.setUpdatePermission(update);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
442 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
443 Relationship readRel = getRelation(annotNode, RelationTypes.PERMITS_READ, null);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
444 if (readRel != null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
445 Node readNode = readRel.getEndNode();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
446 Actor read = createActorFromNode(readNode);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
447 annot.setReadPermission(read);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
448 }
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
449 /*
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
450 * get tags
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
451 */
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
452 Set<String> tags = new HashSet<String>();
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
453 for (Relationship rel : annotNode.getRelationships(RelationTypes.HAS_TAG)) {
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
454 String tag = (String) rel.getEndNode().getProperty("name", null);
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
455 if (tag != null) {
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
456 tags.add(tag);
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
457 }
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
458 }
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
459 annot.setTags(tags);
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
460
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
461 return annot;
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
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
464 /**
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
465 * Returns an Actor object from a node.
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
466 *
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
467 * @param actorNode
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
468 * @return
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
469 */
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
470 protected Actor createActorFromNode(Node actorNode) {
32
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
471 if (actorNode == null) return null;
15
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
472 String id = (String) actorNode.getProperty("id", null);
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
473 String uri = (String) actorNode.getProperty("uri", null);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
474 String name = (String) actorNode.getProperty("name", null);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
475 String type = (String) actorNode.getProperty("TYPE", null);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
476 if (type != null && type.equals("PERSON")) {
15
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
477 return new Person(id, uri, name);
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
478 } else if (type != null && type.equals("GROUP")) {
15
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
479 return new Group(id, uri, name);
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
480 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
481 return null;
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
482 }
32
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
483
28
f4ed2ed33e5b Restinterface zur Anzeige von Tags hinzugefuegt-
dwinter
parents: 24
diff changeset
484 public Tag createTagFromNode(Node tagNode) {
32
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
485 if (tagNode == null) return null;
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
486 String name = (String) tagNode.getProperty("name", null);
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
487 String uri = (String) tagNode.getProperty("uri", null);
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
488 String id = (String) tagNode.getProperty("id", null);
28
f4ed2ed33e5b Restinterface zur Anzeige von Tags hinzugefuegt-
dwinter
parents: 24
diff changeset
489
32
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
490 return new Tag(id, uri, name);
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
491
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
492 }
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
493
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
494 /**
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
495 * 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
496 * the stored annotation.
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
497 *
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
498 * @param annot
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
499 * @return
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
500 */
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
501 public Annotation storeAnnotation(Annotation annot) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
502 Node annotNode = null;
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
503 Transaction tx = graphDb.beginTx();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
504 try {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
505 /*
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
506 * create or get the annotation
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
507 */
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
508 String id = annot.getUri();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
509 if (id == null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
510 id = createRessourceURI("annot:");
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 annotNode = getOrCreateAnnotationNode(id);
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
513
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
514 /*
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
515 * the annotation body
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
516 */
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
517 String bodyText = annot.getBodyText();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
518 if (bodyText != null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
519 annotNode.setProperty("bodyText", bodyText);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
520 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
521 String bodyUri = annot.getBodyUri();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
522 if (bodyUri != null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
523 annotNode.setProperty("bodyUri", bodyUri);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
524 }
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
525
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
526 /*
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
527 * the annotation target
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
528 */
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
529 String targetBaseUri = annot.getTargetBaseUri();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
530 if (targetBaseUri != null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
531 Node target = getOrCreateTargetNode(targetBaseUri);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
532 getOrCreateRelation(annotNode, RelationTypes.ANNOTATES, target);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
533 }
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
534
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
535 /*
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
536 * The fragment part of the annotation target.
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
537 */
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
538 String targetFragment = annot.getTargetFragment();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
539 FragmentTypes fragmentType = annot.getFragmentType();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
540 if (targetFragment != null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
541 annotNode.setProperty("targetFragment", targetFragment);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
542 annotNode.setProperty("fragmentType", fragmentType.name());
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
543 }
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
544
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
545 /*
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
546 * The creator of this annotation.
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
547 */
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
548 Actor creator = annot.getCreator();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
549 if (creator != null) {
15
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
550 Node creatorNode = getOrCreateActorNode(creator);
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
551 getOrCreateRelation(creatorNode, RelationTypes.CREATED, annotNode);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
552 }
12
5928c5d9aae8 more work on permissions...
casties
parents: 11
diff changeset
553
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
554 /*
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
555 * The creation date of this annotation.
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
556 */
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
557 String created = annot.getCreated();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
558 if (created != null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
559 annotNode.setProperty("created", created);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
560 }
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
561
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
562 /*
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
563 * Permissions for this annotation.
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
564 */
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
565 setPermissionRelation(annotNode, RelationTypes.PERMITS_ADMIN, annot.getAdminPermission());
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
566 setPermissionRelation(annotNode, RelationTypes.PERMITS_DELETE, annot.getDeletePermission());
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
567 setPermissionRelation(annotNode, RelationTypes.PERMITS_UPDATE, annot.getUpdatePermission());
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
568 setPermissionRelation(annotNode, RelationTypes.PERMITS_READ, annot.getReadPermission());
6
6dfbe2400f64 delete annotation should work now.
casties
parents: 5
diff changeset
569
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
570 /*
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
571 * Tags on this annotation.
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
572 */
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
573 Set<String> newTags = annot.getTags();
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
574 // we ignore existing tags if tags == null
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
575 if (newTags != null) {
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
576 List<Relationship> oldHasTags = new ArrayList<Relationship>();
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
577 for (Relationship rel : annotNode.getRelationships(RelationTypes.HAS_TAG)) {
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
578 oldHasTags.add(rel);
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
579 }
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
580 // adjust to new tags
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
581 if (newTags.isEmpty()) {
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
582 // remove old tags
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
583 if (!oldHasTags.isEmpty()) {
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
584 for (Relationship rel : oldHasTags) {
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
585 rel.delete();
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
586 // TODO: should we delete orphan nodes too?
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
587 }
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
588 }
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
589 } else {
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
590 if (!oldHasTags.isEmpty()) {
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
591 // adjust old tags
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
592 for (Relationship rel : oldHasTags) {
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
593 String oldTag = (String) rel.getEndNode().getProperty("name", null);
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
594 if (newTags.contains(oldTag)) {
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
595 // tag exists
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
596 newTags.remove(oldTag);
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
597 } else {
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
598 // tag exists no longer
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
599 rel.delete();
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
600 // TODO: should we delete orphan nodes too?
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
601 }
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
602 }
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
603 }
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
604 if (!newTags.isEmpty()) {
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
605 // still tags to add
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
606 for (String tag : newTags) {
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
607 // create new tag
32
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
608 Node tagNode = getOrCreateTagNode(new Tag(null, null, tag));
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
609 getOrCreateRelation(annotNode, RelationTypes.HAS_TAG, tagNode);
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
610 }
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
611 }
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
612
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
613 }
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
614 }
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
615 tx.success();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
616 } finally {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
617 tx.finish();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
618 }
12
5928c5d9aae8 more work on permissions...
casties
parents: 11
diff changeset
619
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
620 // re-read and return annotation
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
621 Annotation storedAnnot = createAnnotationFromNode(annotNode);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
622 return storedAnnot;
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
623 }
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
624
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
625 /**
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
626 * Deletes the annotation with the given id.
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
627 *
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
628 * @param id
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
629 */
32
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
630 public void deleteAnnotationById(String id) {
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
631 Node annotNode = getNodeIndex(NodeTypes.ANNOTATION).get("id", id).getSingle();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
632 if (annotNode != null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
633 // delete related objects
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
634 Transaction tx = graphDb.beginTx();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
635 try {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
636 for (Relationship rel : annotNode.getRelationships()) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
637 // delete relation and the related node if it has no other
32
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
638 // relations and is not permanent
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
639 Node other = rel.getOtherNode(annotNode);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
640 rel.delete();
32
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
641 if (!(other.hasRelationship() || permanentNodeTypes.contains(other.getProperty("TYPE", null)))) {
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
642 deleteNode(other);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
643 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
644 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
645 if (!annotNode.hasRelationship()) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
646 deleteNode(annotNode);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
647 } else {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
648 logger.error("deleteById: unable to delete: Node still has relations.");
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
649 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
650 tx.success();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
651 } finally {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
652 tx.finish();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
653 }
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 }
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
656
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
657 /**
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
658 * Returns all annotations with the given uri and/or user.
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
659 *
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
660 * @param uri
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
661 * @param userUri
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
662 * @param limit
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
663 * @param offset
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
664 * @return
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
665 */
32
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
666 public List<Annotation> searchAnnotationByUriUser(String targetUri, String userUri, String limit, String offset) {
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
667 List<Annotation> annotations = new ArrayList<Annotation>();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
668 if (targetUri != null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
669 // there should be only one
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
670 Node target = getNodeIndex(NodeTypes.TARGET).get("uri", targetUri).getSingle();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
671 if (target != null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
672 Iterable<Relationship> relations = target.getRelationships(RelationTypes.ANNOTATES);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
673 for (Relationship relation : relations) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
674 Node ann = relation.getStartNode();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
675 if (ann.getProperty("TYPE", "").equals("ANNOTATION")) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
676 Annotation annot = createAnnotationFromNode(ann);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
677 annotations.add(annot);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
678 } else {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
679 logger.error("ANNOTATES relation does not start with ANNOTATION: " + ann);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
680 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
681 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
682 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
683 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
684 if (userUri != null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
685 // there should be only one
15
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
686 Node person = getPersonNodeByUri(userUri);
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
687 if (person != null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
688 Iterable<Relationship> relations = person.getRelationships(RelationTypes.CREATED);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
689 for (Relationship relation : relations) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
690 Node ann = relation.getEndNode();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
691 if (ann.getProperty("TYPE", "").equals("ANNOTATION")) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
692 Annotation annot = createAnnotationFromNode(ann);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
693 annotations.add(annot);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
694 } else {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
695 logger.error("CREATED relation does not end with ANNOTATION: " + ann);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
696 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
697 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
698 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
699 }
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
700 // 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
701 return annotations;
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
702 }
5
bbf0cc5bee29 version 0.2 really works now
casties
parents: 4
diff changeset
703
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
704 /**
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
705 * Returns Relationship of type from Node start to Node end. Creates one if
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
706 * it doesn't exist.
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
707 *
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
708 * @param start
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
709 * @param type
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
710 * @param end
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
711 * @return
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
712 */
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
713 protected Relationship getOrCreateRelation(Node start, RelationshipType type, Node end) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
714 if (start.hasRelationship()) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
715 // there are relations
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
716 Iterable<Relationship> rels = start.getRelationships(type, Direction.OUTGOING);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
717 for (Relationship rel : rels) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
718 if (rel.getEndNode().equals(end)) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
719 // relation exists
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
720 return rel;
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
721 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
722 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
723 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
724 // create new one
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
725 Relationship rel;
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
726 Transaction tx = graphDb.beginTx();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
727 try {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
728 rel = start.createRelationshipTo(end, type);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
729 tx.success();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
730 } finally {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
731 tx.finish();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
732 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
733 return rel;
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
734 }
12
5928c5d9aae8 more work on permissions...
casties
parents: 11
diff changeset
735
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
736 protected Node getOrCreateAnnotationNode(String id) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
737 Index<Node> idx = getNodeIndex(NodeTypes.ANNOTATION);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
738 IndexHits<Node> annotations = idx.get("id", id);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
739 Node annotation = annotations.getSingle();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
740 if (annotation == null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
741 // does not exist yet
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
742 Transaction tx = graphDb.beginTx();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
743 try {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
744 annotation = graphDb.createNode();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
745 annotation.setProperty("TYPE", NodeTypes.ANNOTATION.name());
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
746 annotation.setProperty("id", id);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
747 idx.add(annotation, "id", id);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
748 tx.success();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
749 } finally {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
750 tx.finish();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
751 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
752 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
753 return annotation;
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
754 }
6
6dfbe2400f64 delete annotation should work now.
casties
parents: 5
diff changeset
755
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
756 protected Node getOrCreateTargetNode(String uri) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
757 Index<Node> idx = getNodeIndex(NodeTypes.TARGET);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
758 IndexHits<Node> targets = idx.get("uri", uri);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
759 Node target = targets.getSingle();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
760 if (target == null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
761 // does not exist yet
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
762 Transaction tx = graphDb.beginTx();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
763 try {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
764 target = graphDb.createNode();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
765 target.setProperty("TYPE", NodeTypes.TARGET.name());
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
766 target.setProperty("uri", uri);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
767 idx.add(target, "uri", uri);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
768 tx.success();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
769 } finally {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
770 tx.finish();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
771 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
772 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
773 return target;
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
774 }
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
775
22
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
776 protected Node getActorNode(Actor actor) {
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
777 // Person/Group is identified by URI or id
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
778 String uri = actor.getUriString();
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
779 Index<Node> idx;
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
780 if (actor.isGroup()) {
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
781 idx = getNodeIndex(NodeTypes.GROUP);
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
782 } else {
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
783 idx = getNodeIndex(NodeTypes.PERSON);
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
784 }
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
785 IndexHits<Node> persons = idx.get("uri", uri);
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
786 Node person = persons.getSingle();
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
787 return person;
b1fb0d117877 adding and listing groups via html works now.
casties
parents: 19
diff changeset
788 }
32
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
789
15
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
790 protected Node getOrCreateActorNode(Actor actor) {
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
791 // Person/Group is identified by URI or id
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
792 String uri = actor.getUriString();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
793 String name = actor.getName();
15
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
794 String id = actor.getId();
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
795 Index<Node> idx;
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
796 if (actor.isGroup()) {
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
797 idx = getNodeIndex(NodeTypes.GROUP);
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
798 } else {
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
799 idx = getNodeIndex(NodeTypes.PERSON);
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
800 }
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
801 IndexHits<Node> persons = idx.get("uri", uri);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
802 Node person = persons.getSingle();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
803 if (person == null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
804 // does not exist yet
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
805 Transaction tx = graphDb.beginTx();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
806 try {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
807 person = graphDb.createNode();
15
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
808 if (actor.isGroup()) {
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
809 person.setProperty("TYPE", NodeTypes.GROUP.name());
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
810 } else {
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
811 person.setProperty("TYPE", NodeTypes.PERSON.name());
15
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
812 }
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
813 person.setProperty("uri", uri);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
814 idx.add(person, "uri", uri);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
815 if (name != null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
816 person.setProperty("name", name);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
817 }
15
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
818 if (id != null) {
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
819 person.setProperty("id", id);
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
820 }
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
821 tx.success();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
822 } finally {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
823 tx.finish();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
824 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
825 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
826 return person;
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
827 }
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
828
28
f4ed2ed33e5b Restinterface zur Anzeige von Tags hinzugefuegt-
dwinter
parents: 24
diff changeset
829 protected Node getOrCreateTagNode(Tag inTag) {
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
830 Index<Node> idx = getNodeIndex(NodeTypes.TAG);
28
f4ed2ed33e5b Restinterface zur Anzeige von Tags hinzugefuegt-
dwinter
parents: 24
diff changeset
831 String tagname = inTag.getName();
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
832 IndexHits<Node> tags = idx.get("name", tagname);
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
833 Node tag = tags.getSingle();
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
834 if (tag == null) {
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
835 // does not exist yet
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
836 Transaction tx = graphDb.beginTx();
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
837 try {
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
838 tag = graphDb.createNode();
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
839 tag.setProperty("TYPE", NodeTypes.TAG.name());
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
840 tag.setProperty("name", tagname);
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
841 idx.add(tag, "name", tagname);
32
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
842
28
f4ed2ed33e5b Restinterface zur Anzeige von Tags hinzugefuegt-
dwinter
parents: 24
diff changeset
843 tag.setProperty("id", inTag.getId());
f4ed2ed33e5b Restinterface zur Anzeige von Tags hinzugefuegt-
dwinter
parents: 24
diff changeset
844 tag.setProperty("uri", inTag.getUri());
f4ed2ed33e5b Restinterface zur Anzeige von Tags hinzugefuegt-
dwinter
parents: 24
diff changeset
845 idx.add(tag, "uri", inTag.getUri());
32
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
846
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
847 tx.success();
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
848 } finally {
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
849 tx.finish();
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
850 }
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
851 }
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
852 return tag;
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
853 }
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
854
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
855 /**
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
856 * Create or update permissions relations for an annotation.
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
857 *
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
858 * @param annotNode
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
859 * @param type
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
860 * @param annot
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
861 */
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
862 protected void setPermissionRelation(Node annotNode, RelationTypes type, Actor actor) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
863 Node newActorNode = null;
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
864 if (actor != null) {
15
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
865 newActorNode = getOrCreateActorNode(actor);
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
866 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
867 Relationship rel = getRelation(annotNode, type, null);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
868 if (rel != null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
869 // relation exists
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
870 Node oldActorNode = rel.getEndNode();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
871 if (!oldActorNode.equals(newActorNode)) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
872 // new admin is different
33
86bb29132ba6 add transaction.
casties
parents: 32
diff changeset
873 Transaction tx = graphDb.beginTx();
86bb29132ba6 add transaction.
casties
parents: 32
diff changeset
874 try {
86bb29132ba6 add transaction.
casties
parents: 32
diff changeset
875 rel.delete();
86bb29132ba6 add transaction.
casties
parents: 32
diff changeset
876 tx.success();
86bb29132ba6 add transaction.
casties
parents: 32
diff changeset
877 } finally {
86bb29132ba6 add transaction.
casties
parents: 32
diff changeset
878 tx.finish();
86bb29132ba6 add transaction.
casties
parents: 32
diff changeset
879 }
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
880 if (newActorNode != null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
881 rel = getOrCreateRelation(annotNode, type, newActorNode);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
882 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
883 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
884 } else {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
885 // no relation yet
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
886 if (newActorNode != null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
887 rel = getOrCreateRelation(annotNode, type, newActorNode);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
888 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
889 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
890 }
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
891
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
892 /**
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
893 * Unindexes and deletes given Node if it has no relations.
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
894 *
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
895 * @param node
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
896 */
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
897 protected void deleteNode(Node node) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
898 Transaction tx = graphDb.beginTx();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
899 try {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
900 if (node.hasRelationship()) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
901 logger.error("deleteNode: unable to delete: Node still has relations.");
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
902 } else {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
903 String ts = (String) node.getProperty("TYPE", null);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
904 try {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
905 NodeTypes type = NodeTypes.valueOf(ts);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
906 getNodeIndex(type).remove(node);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
907 } catch (Exception e) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
908 logger.error("deleteNode: unable to get TYPE of node: " + node);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
909 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
910 node.delete();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
911 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
912 tx.success();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
913 } finally {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
914 tx.finish();
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
915 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
916 }
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
917
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
918 /**
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
919 * returns the (first) Relationship of RelationTypes type from Node start.
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
920 *
15
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
921 * @param start
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
922 * @param type
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
923 * @param direction
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
924 * @return
58357a4b86de ASSIGNED - # 249: Annotations shared in groups
casties
parents: 14
diff changeset
925 */
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
926 protected Relationship getRelation(Node start, RelationTypes type, Direction direction) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
927 Iterable<Relationship> rels;
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
928 if (direction == null) {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
929 // ignore direction
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
930 rels = start.getRelationships(type);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
931 } else {
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
932 rels = start.getRelationships(type, direction);
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
933 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
934 for (Relationship rel : rels) {
16
794077e6288c CLOSED - # 252: Tags for Annotations
casties
parents: 15
diff changeset
935 // just the first one
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
936 return rel;
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
937 }
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
938 return null;
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
939 }
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
940
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
941 /**
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
942 * Erzeuge eine urn aus der aktuellen Zeit in millis
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
943 *
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
944 * @return
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
945 */
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
946 private String createRessourceURI(String prefix) {
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
947
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
948 Calendar cal = Calendar.getInstance();
12
5928c5d9aae8 more work on permissions...
casties
parents: 11
diff changeset
949
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
950 long time = cal.getTimeInMillis();
12
5928c5d9aae8 more work on permissions...
casties
parents: 11
diff changeset
951
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
952 return String.format("%s%s%s", ANNOTATION_URI_BASE, prefix, time);
12
5928c5d9aae8 more work on permissions...
casties
parents: 11
diff changeset
953
14
629e15b345aa permissions mostly work. need more server-side checking.
casties
parents: 13
diff changeset
954 }
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
955
32
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
956 public List<Annotation> getAnnotationsByTag(String tagUri) {
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
957
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
958 ArrayList<Annotation> ret = new ArrayList<Annotation>();
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
959 Node tag = getTagNodeByUri(tagUri);
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
960
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
961 Iterable<Relationship> rels = tag.getRelationships(Direction.INCOMING, RelationTypes.HAS_TAG);
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
962
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
963 for (Relationship rel : rels) {
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
964 Node node = rel.getStartNode();
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
965 ret.add(createAnnotationFromNode(node));
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
966
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
967 }
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
968 return ret;
0731c4549065 UI for editing groups and persons works now. (still no authorisation!)
casties
parents: 29
diff changeset
969 }
28
f4ed2ed33e5b Restinterface zur Anzeige von Tags hinzugefuegt-
dwinter
parents: 24
diff changeset
970
4
3599b29c393f store seems to work now :-)
casties
parents:
diff changeset
971 }