package org.neo4j.smack.api; import org.neo4j.graphdb.Node; import org.neo4j.graphdb.Relationship; /** * Central authority for url lookups. * Dead simple right now, but to be expanded down the road. * * TODO: Perhaps move path constants into their own class? */ public class UrlReverseLookerUpper { // // Path variable keys // public static final String PROPERTY_KEY_NAME = "key"; public static final String NODE_ID_NAME = "node_id"; public static final String RELATIONSHIP_ID_NAME = "relationship_id"; public static final String RELATIONSHIP_DIRECTION_NAME = "direction"; public static final String RELATIONSHIP_TYPES_NAME = "types"; public static final String PATH_NODES = "node"; public static final String PATH_NODE = PATH_NODES + "/{" + NODE_ID_NAME + "}"; public static final String PATH_NODE_PROPERTIES = PATH_NODE + "/properties"; public static final String PATH_NODE_PROPERTY = PATH_NODE_PROPERTIES + "/{" + PROPERTY_KEY_NAME + "}"; // // Paths // public static final String PATH_NODE_RELATIONSHIPS = PATH_NODE + "/relationships"; public static final String PATH_RELATIONSHIP = "relationship/{" + RELATIONSHIP_ID_NAME + "}"; public static final String PATH_NODE_RELATIONSHIPS_W_DIR = PATH_NODE_RELATIONSHIPS + "/{"+RELATIONSHIP_DIRECTION_NAME+"}"; public static final String PATH_NODE_RELATIONSHIPS_W_DIR_N_TYPES = PATH_NODE_RELATIONSHIPS_W_DIR + "/{"+RELATIONSHIP_TYPES_NAME+"}"; public static final String PATH_RELATIONSHIP_PROPERTIES = PATH_RELATIONSHIP + "/properties"; public static final String PATH_RELATIONSHIP_PROPERTY = PATH_RELATIONSHIP_PROPERTIES + "/{"+PROPERTY_KEY_NAME+"}"; public String reverse(Node node) { return "/db/data/node/" + node.getId(); } public String reverse(Relationship rel) { return "/db/data/relationship/" + rel.getId(); } public String reverseTransaction(Long txId) { return "/db/data/tx/" + txId; } // TODO: This is used by deserializers, // see if we can write a special deserializer // that extracts this id without creating garbage. public static long nodeId(String string) { String [] parts = string.split("\\/"); return Long.valueOf(parts[parts.length-1]); } }