1 /**
2 * Copyright (c) 2002-2011 "Neo Technology,"
3 * Network Engine for Objects in Lund AB [http://neotechnology.com]
4 *
5 * This file is part of Neo4j.
6 *
7 * Neo4j is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 package org.neo4j.server.rest.repr;
21
22 import org.neo4j.graphdb.Node;
23 import org.neo4j.graphdb.Path;
24 import org.neo4j.graphdb.Relationship;
25 import org.neo4j.helpers.collection.IterableWrapper;
26
27 public class PathRepresentation<P extends Path> extends ObjectRepresentation //implements ExtensibleRepresentation
28 {
29 private final P path;
30
31 public PathRepresentation( P path )
32 {
33 super( RepresentationType.PATH );
34 this.path = path;
35 }
36
37 /*
38 @Override
39 public String getIdentity()
40 {
41 StringBuilder result = new StringBuilder( Long.toString( path.startNode().getId() ) );
42 String sep = "+";
43 for ( Relationship rel : path.relationships() )
44 {
45 result.append( sep ).append( Long.toString( rel.getId() ) );
46 sep = "-";
47 }
48 result.append( "+" ).append( Long.toString( path.endNode().getId() ) );
49 return result.toString();
50 }
51 */
52
53 protected P getPath()
54 {
55 return path;
56 }
57
58 @Mapping( "start" )
59 public ValueRepresentation startNode()
60 {
61 return ValueRepresentation.uri( NodeRepresentation.path( path.startNode() ) );
62 }
63
64 @Mapping( "end" )
65 public ValueRepresentation endNode()
66 {
67 return ValueRepresentation.uri( NodeRepresentation.path( path.endNode() ) );
68 }
69
70 @Mapping( "length" )
71 public ValueRepresentation length()
72 {
73 return ValueRepresentation.number( path.length() );
74 }
75
76 @Mapping( "nodes" )
77 public ListRepresentation nodes()
78 {
79 return new ListRepresentation( RepresentationType.NODE, new IterableWrapper<Representation, Node>(
80 path.nodes() )
81 {
82 @Override
83 protected Representation underlyingObjectToObject( Node node )
84 {
85 return ValueRepresentation.uri( NodeRepresentation.path( node ) );
86 }
87 } );
88 }
89
90 @Mapping( "relationships" )
91 public ListRepresentation relationships()
92 {
93 return new ListRepresentation( RepresentationType.RELATIONSHIP,
94 new IterableWrapper<Representation, Relationship>( path.relationships() )
95 {
96 @Override
97 protected Representation underlyingObjectToObject( Relationship node )
98 {
99 return ValueRepresentation.uri( RelationshipRepresentation.path( node ) );
100 }
101 } );
102 }
103 }