annotate src/main/java/de/mpiwg/itgroup/annotations/neo4j/AnnotationStore.java @ 42:aa2bb7ac04d9

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