1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.neo4j.examples.socnet;
21
22 import org.neo4j.graphdb.Direction;
23 import org.neo4j.graphdb.Node;
24 import org.neo4j.graphdb.traversal.TraversalDescription;
25 import org.neo4j.graphdb.traversal.Traverser;
26 import org.neo4j.helpers.collection.IteratorUtil;
27 import org.neo4j.kernel.Traversal;
28
29 import java.util.Date;
30
31 import static org.neo4j.examples.socnet.RelTypes.NEXT;
32 import static org.neo4j.examples.socnet.RelTypes.STATUS;
33
34 public class StatusUpdate
35 {
36 private final Node underlyingNode;
37 static final String TEXT = "TEXT";
38 static final String DATE = "DATE";
39
40 public StatusUpdate( Node underlyingNode )
41 {
42
43 this.underlyingNode = underlyingNode;
44 }
45
46 public Node getUnderlyingNode()
47 {
48 return underlyingNode;
49 }
50
51 public Person getPerson()
52 {
53 return new Person( getPersonNode() );
54 }
55
56 private Node getPersonNode()
57 {
58 TraversalDescription traversalDescription = Traversal.description().
59 depthFirst().
60 relationships( NEXT, Direction.INCOMING ).
61 relationships( STATUS, Direction.INCOMING ).
62 filter( Traversal.returnWhereLastRelationshipTypeIs( STATUS ));
63
64 Traverser traverser = traversalDescription.traverse( getUnderlyingNode() );
65
66 return IteratorUtil.singleOrNull( traverser.iterator() ).endNode();
67 }
68
69 public String getStatusText()
70 {
71 return (String)underlyingNode.getProperty( TEXT );
72 }
73
74 public Date getDate()
75 {
76 Long l = (Long)underlyingNode.getProperty( DATE );
77
78 return new Date( l );
79 }
80
81 }