@Override public Optional<Isl> findByEndpoints(SwitchId srcSwitchId, int srcPort, SwitchId dstSwitchId, int dstPort) { Filter srcSwitchFilter = createSrcSwitchFilter(srcSwitchId); Filter srcPortFilter = new Filter(SRC_PORT_PROPERTY_NAME, ComparisonOperator.EQUALS, srcPort); Filter dstSwitchFilter = createDstSwitchFilter(dstSwitchId); Filter dstPortFilter = new Filter(DST_PORT_PROPERTY_NAME, ComparisonOperator.EQUALS, dstPort); Collection<Isl> isls = getSession().loadAll(getEntityType(), srcSwitchFilter.and(srcPortFilter).and(dstSwitchFilter).and(dstPortFilter), DEPTH_LOAD_ENTITY); if (isls.size() > 1) { throw new PersistenceException(format("Found more that 1 ISL entity with %s_%d - %s_%d", srcSwitchId, srcPort, dstSwitchId, dstPort)); } return isls.isEmpty() ? Optional.empty() : Optional.of(isls.iterator().next()); }
@Override public Collection<Isl> findByPartialEndpoints(SwitchId srcSwitchId, Integer srcPort, SwitchId dstSwitchId, Integer dstPort) { Filters filters = new Filters(); if (srcSwitchId != null) { filters.and(createSrcSwitchFilter(srcSwitchId)); } if (srcPort != null) { filters.and(new Filter(SRC_PORT_PROPERTY_NAME, ComparisonOperator.EQUALS, srcPort)); } if (dstSwitchId != null) { filters.and(createDstSwitchFilter(dstSwitchId)); } if (dstPort != null) { filters.and(new Filter(DST_PORT_PROPERTY_NAME, ComparisonOperator.EQUALS, dstPort)); } return getSession().loadAll(getEntityType(), filters, DEPTH_LOAD_ENTITY); }
@Override public Collection<LinkProps> findByEndpoints(SwitchId srcSwitch, Integer srcPort, SwitchId dstSwitch, Integer dstPort) { Filters filters = new Filters(); if (srcSwitch != null) { filters.and(new Filter(SRC_SWITCH_PROPERTY_NAME, ComparisonOperator.EQUALS, srcSwitch)); } if (srcPort != null) { filters.and(new Filter(SRC_PORT_PROPERTY_NAME, ComparisonOperator.EQUALS, srcPort)); } if (dstSwitch != null) { filters.and(new Filter(DST_SWITCH_PROPERTY_NAME, ComparisonOperator.EQUALS, dstSwitch)); } if (dstPort != null) { filters.and(new Filter(DST_PORT_PROPERTY_NAME, ComparisonOperator.EQUALS, dstPort)); } return getSession().loadAll(getEntityType(), filters, DEPTH_LOAD_ENTITY); } }
/** * @see DATAGRAPH-445 */ @Test public void testFindByChainedAndedProperties() { Filter planetParam = new Filter("name", ComparisonOperator.EQUALS, "Earth"); planetParam.setNestedPropertyName("collidesWith"); planetParam.setNestedEntityTypeLabel("Planet"); planetParam.setRelationshipType("COLLIDES"); planetParam.setRelationshipDirection("OUTGOING"); Filter moonParam = new Filter("name", ComparisonOperator.EQUALS, "Moon"); moonParam.setNestedPropertyName("moon"); moonParam.setNestedEntityTypeLabel("Moon"); moonParam.setRelationshipType("ORBITS"); moonParam.setRelationshipDirection("INCOMING"); assertThat(queryStatements.findByType("Asteroid", new Filters().add(planetParam).and(moonParam), 1).getStatement()) .isEqualTo("MATCH (n:`Asteroid`) MATCH (m0:`Planet`) WHERE m0.`name` = { `collidesWith_name_0` } " + "MATCH (m1:`Moon`) WHERE m1.`name` = { `moon_name_1` } MATCH (n)-[:`COLLIDES`]->(m0) " + "MATCH (n)<-[:`ORBITS`]-(m1) WITH DISTINCT n MATCH p=(n)-[*0..1]-(m) RETURN p, ID(n)"); }