@Test public void testAddProperty() { String key3 = "key3"; Node node1 = getGraphDb().getNodeById(node1Id); Node node2 = getGraphDb().getNodeById(node2Id); Relationship rel = node1.getSingleRelationship(MyRelTypes.TEST, Direction.BOTH); // add new property node2.setProperty(key3, int1); rel.setProperty(key3, int2); assertTrue(node1.hasProperty(key1)); assertTrue(node2.hasProperty(key1)); assertTrue(node1.hasProperty(key2)); assertTrue(node2.hasProperty(key2)); assertTrue(node1.hasProperty(arrayKey)); assertTrue(node2.hasProperty(arrayKey)); assertTrue(rel.hasProperty(arrayKey)); assertTrue(!node1.hasProperty(key3)); assertTrue(node2.hasProperty(key3)); assertEquals(int1, node1.getProperty(key1)); assertEquals(int2, node2.getProperty(key1)); assertEquals(string1, node1.getProperty(key2)); assertEquals(string2, node2.getProperty(key2)); assertEquals(int1, rel.getProperty(key1)); assertEquals(string1, rel.getProperty(key2)); assertEquals(int2, rel.getProperty(key3)); }
@Test public void testRelMultiRemoveProperty() { Node node1 = getGraphDb().createNode(); Node node2 = getGraphDb().createNode(); Relationship rel = node1.createRelationshipTo(node2, MyRelTypes.TEST); rel.setProperty("key0", "0"); rel.setProperty("key1", "1"); rel.setProperty("key2", "2"); rel.setProperty("key3", "3"); rel.setProperty("key4", "4"); newTransaction(); rel.removeProperty("key3"); rel.removeProperty("key2"); rel.removeProperty("key3"); newTransaction(); getNodeManager().clearCache(); assertEquals("0", rel.getProperty("key0")); assertEquals("1", rel.getProperty("key1")); assertEquals("4", rel.getProperty("key4")); assertTrue(!rel.hasProperty("key2")); assertTrue(!rel.hasProperty("key3")); rel.delete(); node1.delete(); node2.delete(); }
@Test public void testRelationshipAddProperty() { Node node1 = getGraphDb().createNode(); Node node2 = getGraphDb().createNode(); Relationship rel1 = node1.createRelationshipTo(node2, MyRelTypes.TEST); Relationship rel2 = node2.createRelationshipTo(node1, MyRelTypes.TEST); try { rel1.setProperty(null, null); fail("Null argument should result in exception."); } catch (IllegalArgumentException e) { } Integer int1 = new Integer(1); Integer int2 = new Integer(2); String string1 = new String("1"); String string2 = new String("2"); // add property rel1.setProperty(key1, int1); rel2.setProperty(key1, string1); rel1.setProperty(key2, string2); rel2.setProperty(key2, int2); assertTrue(rel1.hasProperty(key1)); assertTrue(rel2.hasProperty(key1)); assertTrue(rel1.hasProperty(key2)); assertTrue(rel2.hasProperty(key2)); assertTrue(!rel1.hasProperty(key3)); assertTrue(!rel2.hasProperty(key3)); assertEquals(int1, rel1.getProperty(key1)); assertEquals(string1, rel2.getProperty(key1)); assertEquals(string2, rel1.getProperty(key2)); assertEquals(int2, rel2.getProperty(key2)); getTransaction().failure(); }
@Test public void testRelationshipChangeProperty2() { Integer int1 = new Integer(1); Integer int2 = new Integer(2); String string1 = new String("1"); String string2 = new String("2"); Boolean bool1 = new Boolean(true); Boolean bool2 = new Boolean(false); Node node1 = getGraphDb().createNode(); Node node2 = getGraphDb().createNode(); Relationship rel1 = node1.createRelationshipTo(node2, MyRelTypes.TEST); rel1.setProperty(key1, int1); rel1.setProperty(key1, int2); assertEquals(int2, rel1.getProperty(key1)); rel1.removeProperty(key1); rel1.setProperty(key1, string1); rel1.setProperty(key1, string2); assertEquals(string2, rel1.getProperty(key1)); rel1.removeProperty(key1); rel1.setProperty(key1, bool1); rel1.setProperty(key1, bool2); assertEquals(bool2, rel1.getProperty(key1)); rel1.removeProperty(key1); rel1.delete(); node2.delete(); node1.delete(); }
@Test public void testGetOrCreateRelationship() throws Exception { final Transaction tx = gdb.beginTx(); final Node david = graphDatabase.createNode(map("name", "David")); final Node michael = graphDatabase.createNode(map("name", "Michael")); final Relationship rel1 = graphDatabase.getOrCreateRelationship( "knows", "whom", "david_michael", david, michael, "KNOWS", map("whom", "david_michael")); final Relationship rel2 = graphDatabase.getOrCreateRelationship( "knows", "whom", "david_michael", david, michael, "KNOWS", map("whom", "david_michael")); assertEquals("david_michael", rel1.getProperty("whom")); assertEquals("KNOWS", rel1.getType().name()); assertEquals(david, rel1.getStartNode()); assertEquals(michael, rel1.getEndNode()); assertEquals(rel1, rel2); assertEquals( rel1, gdb.index().forRelationships("knows").get("whom", "david_michael").getSingle()); tx.success(); tx.finish(); }
@Test public void testChangeProperty() { Node node1 = getGraphDb().createNode(); Node node2 = getGraphDb().createNode(); Relationship rel = node1.createRelationshipTo(node2, MyRelTypes.TEST); rel.setProperty("test", "test1"); newTransaction(); rel.setProperty("test", "test2"); rel.removeProperty("test"); rel.setProperty("test", "test3"); assertEquals("test3", rel.getProperty("test")); rel.removeProperty("test"); rel.setProperty("test", "test4"); newTransaction(); assertEquals("test4", rel.getProperty("test")); }
public Representation getRelationshipProperty(long relationshipId, String key) throws NoSuchPropertyException, RelationshipNotFoundException { Relationship relationship = relationship(relationshipId); try { return PropertiesRepresentation.value(relationship.getProperty(key)); } catch (NotFoundException e) { throw new NoSuchPropertyException(relationship, key); } }
@Test @Transactional public void shouldCreateRelationshipWithProperty() throws Exception { Relationship relationship = neo4jTemplate.createRelationshipBetween(referenceNode, node1, "has", map("name", "rel2")); assertNotNull(relationship); assertEquals(referenceNode, relationship.getStartNode()); assertEquals(node1, relationship.getEndNode()); assertEquals(HAS.name(), relationship.getType().name()); assertEquals("rel2", relationship.getProperty("name", "not set")); }
@Test public void listing3_9_add_properties_to_relationships() { usersAndMovies.addPropertiesToRelationships(); try (Transaction tx = graphDb.beginTx()) { Relationship hasSeen = usersAndMovies.user1.getSingleRelationship( MyRelationshipTypes.HAS_SEEN, Direction.OUTGOING); assertEquals(5, hasSeen.getProperty("stars")); tx.success(); } }
// ----- protected methods ----- protected boolean hasPropertyValue( Relationship rel, PropertyKey propertyKey, Object propertyValue) { if (rel != null && rel.hasProperty(propertyKey.dbName())) { Object value = rel.getProperty(propertyKey.dbName()); return value.equals(propertyValue); } return false; }
@Test public void testAddCacheCleared() { Node nodeA = getGraphDb().createNode(); nodeA.setProperty("1", 1); Node nodeB = getGraphDb().createNode(); Relationship rel = nodeA.createRelationshipTo(nodeB, MyRelTypes.TEST); rel.setProperty("1", 1); getTransaction().success(); getTransaction().finish(); newTransaction(); NodeManager nodeManager = ((EmbeddedGraphDatabase) getGraphDb()).getConfig().getGraphDbModule().getNodeManager(); nodeManager.clearCache(); nodeA.createRelationshipTo(nodeB, MyRelTypes.TEST); int count = 0; for (Relationship relToB : nodeA.getRelationships(MyRelTypes.TEST)) { count++; } assertEquals(2, count); nodeA.setProperty("2", 2); assertEquals(1, nodeA.getProperty("1")); rel.setProperty("2", 2); assertEquals(1, rel.getProperty("1")); nodeManager.clearCache(); // trigger empty load getGraphDb().getNodeById(nodeA.getId()); getGraphDb().getRelationshipById(rel.getId()); // apply COW maps getTransaction().success(); getTransaction().finish(); newTransaction(); count = 0; for (Relationship relToB : nodeA.getRelationships(MyRelTypes.TEST)) { count++; } assertEquals(2, count); assertEquals(1, nodeA.getProperty("1")); assertEquals(1, rel.getProperty("1")); assertEquals(2, nodeA.getProperty("2")); assertEquals(2, rel.getProperty("2")); }
public Map<String, Object> _getProperties(Relationship relationship) { Iterable<String> keys = relationship.getPropertyKeys(); Map<String, Object> pars = null; for (String key : keys) { if (null == pars) pars = new HashMap<String, Object>(); pars.put(key, relationship.getProperty(key)); } return pars; }
@Override public PropertyMap getProperties() throws FrameworkException { Map<String, Object> properties = new LinkedHashMap<>(); for (String key : dbRelationship.getPropertyKeys()) { properties.put(key, dbRelationship.getProperty(key)); } // convert the database properties back to their java types return PropertyMap.databaseTypeToJavaType(securityContext, this, properties); }
@Test public void testRelGetProperties() { Integer int1 = new Integer(1); Integer int2 = new Integer(2); String string = new String("3"); Node node1 = getGraphDb().createNode(); Node node2 = getGraphDb().createNode(); Relationship rel1 = node1.createRelationshipTo(node2, MyRelTypes.TEST); try { rel1.getProperty(key1); fail("get non existing property din't throw exception"); } catch (NotFoundException e) { } try { rel1.getProperty(null); fail("get of null key din't throw exception"); } catch (IllegalArgumentException e) { } assertTrue(!rel1.hasProperty(key1)); assertTrue(!rel1.hasProperty(null)); rel1.setProperty(key1, int1); rel1.setProperty(key2, int2); rel1.setProperty(key3, string); assertTrue(rel1.hasProperty(key1)); assertTrue(rel1.hasProperty(key2)); assertTrue(rel1.hasProperty(key3)); try { rel1.removeProperty(key3); } catch (NotFoundException e) { fail("Remove of property failed."); } assertTrue(!rel1.hasProperty(key3)); assertTrue(!rel1.hasProperty(null)); rel1.delete(); node2.delete(); node1.delete(); }
public Map<String, Object> getRelationshipProperties(long relationshipId) throws DatabaseBlockedException { Transaction tx = database.graph.beginTx(); try { Relationship relationship = database.graph.getRelationshipById(relationshipId); Map<String, Object> allProperties = new HashMap<String, Object>(); for (String propertyKey : relationship.getPropertyKeys()) { allProperties.put(propertyKey, relationship.getProperty(propertyKey)); } tx.success(); return allProperties; } finally { tx.finish(); } }
@Test public void testSameTxWithArray() { getTransaction().success(); getTransaction().finish(); newTransaction(); Node nodeA = getGraphDb().createNode(); Node nodeB = getGraphDb().createNode(); Relationship relA = nodeA.createRelationshipTo(nodeB, MyRelTypes.TEST); nodeA.setProperty(arrayKey, array); relA.setProperty(arrayKey, array); NodeManager nodeManager = ((EmbeddedGraphDatabase) getGraphDb()).getConfig().getGraphDbModule().getNodeManager(); nodeManager.clearCache(); assertTrue(nodeA.getProperty(arrayKey) != null); assertTrue(relA.getProperty(arrayKey) != null); relA.delete(); nodeA.delete(); nodeB.delete(); }
@Test public void simple_persistent_storage() throws Exception { long firstNodeId = createDb(); GraphDatabaseService graphDb = new GraphDatabaseFactory().newEmbeddedDatabase(DB_PATH); try { Node firstNode = graphDb.getNodeById(firstNodeId); Relationship relationship = firstNode.getSingleRelationship(KNOWS, Direction.OUTGOING); Node secondNode = relationship.getEndNode(); out.println("I just loaded this from the data store:"); out.println(firstNode.getProperty("message")); out.println(firstNode.getProperty("someJson")); out.println(relationship.getProperty("message")); out.println(secondNode.getProperty("message")); } finally { graphDb.shutdown(); } }
@Test public void shouldStoreSuppliedPropertiesWhenCreatingRelationship() throws Exception { Map<String, Object> properties = new HashMap<String, Object>(); properties.put("string", "value"); properties.put("integer", 17); long relId = actions .createRelationship( graphdbHelper.createNode(), graphdbHelper.createNode(), "LOVES", properties) .getId(); Transaction tx = database.getGraph().beginTx(); try { Relationship rel = database.getGraph().getRelationshipById(relId); for (String key : rel.getPropertyKeys()) { assertTrue("extra property stored", properties.containsKey(key)); } for (Map.Entry<String, Object> entry : properties.entrySet()) { assertEquals(entry.getValue(), rel.getProperty(entry.getKey())); } } finally { tx.finish(); } }
// example path: // (start)--[WALK1,1190]-->(hub)--[HUBBUS1,49581]-->(hub)--[53.36179430400081-6.299620132568407,1224]-->(end) public DirectionsList convertOneBusPath(WeightedPath path, double time) { int count = 0; double cost = 0; double deptTime = 0; List<Node> busList = new ArrayList<Node>(); for (Relationship relationship : path.relationships()) { if (count == 0) // lat1lon1 { double distanceInKm = (Double) relationship.getProperty(Connection.DISTANCE); double distanceInMins = Math.round(20 * distanceInKm * 1e2) / 1e2; walks.add(new DirectionsWalk(distanceInMins, relationship.getStartNode(), relationship)); Node stop = stopLayer.get(Stop.STOPID, (String) relationship.getProperty(Stop.STOPID)).getSingle(); busList.add(stop); deptTime = (Double) relationship.getProperty(Connection.TIME); cost += (Double) stop.getProperty(Stop.TIMETOHUB); } if (count == 1) // hubbus1 { cost += (Double) relationship.getProperty(Connection.COST); } if (count == 2) // lat2lon2 { Node stop = stopLayer.get(Stop.STOPID, (String) relationship.getProperty(Stop.STOPID)).getSingle(); cost += (Double) stop.getProperty(Stop.TIMEFROMHUB); busList.add(stop); routes.add(new DirectionsRoute(deptTime, cost, busList)); double distanceInKm = (Double) relationship.getProperty(Connection.DISTANCE); double distanceInMins = Math.round(20 * distanceInKm * 1e2) / 1e2; walks.add(new DirectionsWalk(distanceInMins, relationship, relationship.getEndNode())); } count++; } directionsList.add(new Directions(routes, walks)); // Add Total cost return directionsList; }
/** * Returns the actual key value which the key ({@link #getKey()}) can be derived from, f.ex. a * String. * * @return the actual key value. */ public Object getKeyValue() { return entryRelationship.getProperty(KEY_VALUE, null); }
/** * Returns the value for this entry. This is the value added via {@link BTree#addEntry(long, * Object)}. * * @return the value for this entry. */ public Object getValue() { return entryRelationship.getProperty(VALUE); }
// example path: // (start)--[WALK1,25037]-->(hub)--[HUBBUS1,44652]-->(hub)--[TRANSFER,44624]-->(hubtransfer)--[WALK2,61370]-->(hubtransfer)--[O0033,48991]-->(hub)--[HUBBUS1,49028]-->(hub)--[53.373665-6.251902,25283]-->(end) public DirectionsList convertTwoBusPath(WeightedPath path, double time) { int count = 0; double cost = 0; double deptTime = 0; List<Node> busList1 = new ArrayList<Node>(); List<Node> busList2 = new ArrayList<Node>(); for (Relationship relationship : path.relationships()) { if (count == 0) // lat1lon1 { double distanceInKm = (Double) relationship.getProperty(Connection.DISTANCE); double distanceInMins = Math.round(20 * distanceInKm * 1e2) / 1e2; walks.add(new DirectionsWalk(distanceInMins, relationship.getStartNode(), relationship)); Node stop = stopLayer.get(Stop.STOPID, (String) relationship.getProperty(Stop.STOPID)).getSingle(); busList1.add(stop); deptTime = (Double) relationship.getProperty(Connection.TIME); cost += (Double) stop.getProperty(Stop.TIMETOHUB); } if (count == 1) // hubbus1 { cost += (Double) relationship.getProperty(Connection.COST); busList1.add(relationship.getEndNode()); routes.add(new DirectionsRoute(deptTime, cost, busList1)); } if (count == 3) // walk2 { double distanceInMins = (Double) relationship.getProperty(Connection.COST); cost += distanceInMins; walks.add( new DirectionsWalk( distanceInMins, relationship.getStartNode(), relationship.getEndNode())); } if (count == 5) // hubbus1 { busList2.add(relationship.getStartNode()); double[] transferTimes = (double[]) relationship.getStartNode().getProperty(Hub.DEPTTIMES); int insertionPoint = Arrays.binarySearch(transferTimes, (deptTime + cost)); insertionPoint = (insertionPoint < 0) ? ((insertionPoint * -1) - 1) : insertionPoint; // ( -( insertion point ) - 1) if (insertionPoint != transferTimes.length) deptTime = transferTimes[insertionPoint]; cost = 0.0; cost += (Double) relationship.getProperty(Connection.COST); } if (count == 6) // lat2lon2 { Node stop = stopLayer.get(Stop.STOPID, (String) relationship.getProperty(Stop.STOPID)).getSingle(); cost += (Double) stop.getProperty(Stop.TIMEFROMHUB); busList2.add(stop); routes.add(new DirectionsRoute(deptTime, cost, busList2)); double distanceInKm = (Double) relationship.getProperty(Connection.DISTANCE); double distanceInMins = Math.round(20 * distanceInKm * 1e2) / 1e2; walks.add(new DirectionsWalk(distanceInMins, relationship, relationship.getEndNode())); } count++; } directionsList.add(new Directions(routes, walks)); return directionsList; }
@Override public String convert(Relationship value, Class<String> type) { return (String) value.getProperty("name"); }
@Test public void testGetDirectedRelationship() { Node node1 = getGraphDb().getNodeById(node1Id); Relationship rel = node1.getSingleRelationship(MyRelTypes.TEST, Direction.OUTGOING); assertEquals(int1, rel.getProperty(key1)); }
public Double getCost(Relationship relationship, Direction direction) { return (Double) relationship.getProperty(costpropertyName); }
/** * Returns the key for this entry, the key added via {@link BTree#addEntry(long, Object)}. * * @return the key for this entry. */ public long getKey() { return (Long) entryRelationship.getProperty(KEY); }
/** Compare the specified source property of the two provided relationships. */ @Override public int compare(Relationship rel1, Relationship rel2) { Object v1 = null; Object v2 = null; if (rel1.hasProperty("source") == false || rel2.hasProperty("source") == false) { if (VERBOSE) { System.out.println("Ack!!! A relationship has no source!"); System.out.println( "rel1 source = " + rel1.getProperty("source") + "; rel2 source = " + rel2.getProperty("source")); } return 0; } IndexHits<Node> h1 = metadataNodeIndex.get("source", rel1.getProperty("source")); IndexHits<Node> h2 = metadataNodeIndex.get("source", rel2.getProperty("source")); if (h1.size() == 0 || h2.size() == 0) { if (VERBOSE) { System.out.println("Dorf!!! A relationship has no metaDataNode!"); System.out.println( "rel1 MDN = " + metadataNodeIndex.get("source", rel1.getProperty("source")) + "; rel2 MDN = " + metadataNodeIndex.get("source", rel1.getProperty("source"))); } return 0; } Node m1 = h1.next(); Node m2 = h2.next(); h1.close(); h2.close(); if (m1.hasProperty(property.propertyName)) { v1 = m1.getProperty(property.propertyName); } if (m2.hasProperty(property.propertyName)) { v2 = m2.getProperty(property.propertyName); } if (v1 == null && v2 == null) { return 0; } else if (v2 == NOTRANKED) { return -1; } else if (v1 == NOTRANKED) { return 1; } Integer rank1 = NOTRANKED; Integer rank2 = NOTRANKED; if (property.type == String.class) { if (priorityMapString.containsKey(v1)) { rank1 = priorityMapString.get(v1); } if (priorityMapString.containsKey(v2)) { rank2 = priorityMapString.get(v2); } } else if (property.type == Long.class || property.type == Integer.class) { if (priorityMapString.containsKey(v1)) { rank1 = priorityMapLong.get(v1); } if (priorityMapString.containsKey(v2)) { rank2 = priorityMapLong.get(v2); } } else if (property.type == Double.class) { if (priorityMapString.containsKey(v1)) { rank1 = priorityMapDouble.get(v1); } if (priorityMapString.containsKey(v2)) { rank2 = priorityMapDouble.get(v2); } } else { throw new java.lang.UnsupportedOperationException( "the source property datatype " + String.valueOf(property.type) + " is unrecognized"); } Integer retval = null; if (rank1 == NOTRANKED && rank2 == NOTRANKED) { retval = 0; if (VERBOSE) { System.out.println("Glarg!!! Both relationships are unranked"); } } else if (rank2 == NOTRANKED) { retval = -1; nRankableRelsCompared++; if (VERBOSE) { System.out.println( "rel 2 (relid " + rel2.getId() + "; source " + rel2.getProperty("source") + ") property " + v2 + " is not in priority list; preferring rel 1 (relid " + rel1.getId() + "; source " + rel1.getProperty("source") + ") property " + v1 + ")"); } } else if (rank1 == NOTRANKED) { retval = 1; nRankableRelsCompared++; if (VERBOSE) { System.out.println( "rel 1 (relid " + rel1.getId() + "; name " + rel1.getProperty("source") + ") property " + v1 + " is not in priority list; preferring rel 2 (relid " + rel2.getId() + "; source " + rel2.getProperty("source") + ") property " + v2 + ")"); } } else { retval = rank1.compareTo(rank2); nRankableRelsCompared += 2; if (VERBOSE) { System.out.println( "rel 1 (relid " + rel1.getId() + "; name " + rel1.getProperty("source") + ") property " + v1 + " || rel 2 (relid " + rel2.getId() + "; source " + rel2.getProperty("source") + ") property " + v2 + ")"); System.out.println("\t" + retval); } } // priority is indicated by proximity to the beginning of the list, so we sort in REVERSE! // return retval * -1; return retval; }