@Override public Observable<Edge> getEdgesFromSource( final GraphManager gm, final Id sourceNode, final String targetType ) { final Observable<String> edgeTypes = gm.getEdgeTypesFromSource( new SimpleSearchEdgeType( sourceNode, null, null ) ); return edgeTypes.flatMap( edgeType -> { if (logger.isTraceEnabled()) { logger.trace("Loading edges of edgeType {} from {}", edgeType, sourceNode); } return gm.loadEdgesFromSourceByType( new SimpleSearchByIdType( sourceNode, edgeType, Long.MAX_VALUE, SearchByEdgeType.Order.DESCENDING, targetType, null ) ); } ); }
@Override public Observable<FilterResult<Id>> call( final Observable<FilterResult<Id>> filterResultObservable ) { //get the graph manager final GraphManager graphManager = graphManagerFactory.createEdgeManager( pipelineContext.getApplicationScope() ); final String edgeName = getEdgeTypeFromConnectionType( connectionName ); //return all ids that are emitted from this edge return filterResultObservable.flatMap( idFilterResult -> { //set our our constant state final Optional<MarkedEdge> startFromCursor = getSeekValue(); final Id id = idFilterResult.getValue(); final Optional<Edge> typeWrapper = Optional.fromNullable(startFromCursor.orNull()); final SimpleSearchByIdType search = new SimpleSearchByIdType( id, edgeName, Long.MAX_VALUE, SearchByEdgeType.Order.DESCENDING, entityType, typeWrapper ); return graphManager.loadEdgesFromSourceByType( search ).map( edge -> createFilterResult( edge.getTargetNode(), edge, idFilterResult.getPath() )); } ); }
Observable<MarkedEdge> edges = gm.loadEdgesFromSourceByType( createSearchByEdgeAndId( sourceId, edge1.getType(), maxVersion, targetId1.getType(), null ) ); edges = gm.loadEdgesFromSourceByType( createSearchByEdgeAndId( sourceId, edge1.getType(), maxVersion, targetId1.getType(), null ) ); edges = gm.loadEdgesFromSourceByType( createSearchByEdgeAndId( sourceId, edge1.getType(), maxVersion, targetId2.getType(), null ) ); edges = gm.loadEdgesFromSourceByType( createSearchByEdgeAndId( sourceId, edge1.getType(), maxVersion, targetId2.getType(), null ) );
results = gm.loadEdgesFromSourceByType( createSearchByEdgeAndId( sourceId, edge1.getType(), maxVersion, targetId1.getType(), null ) ).toBlocking() .getIterator(); results = gm.loadEdgesFromSourceByType( createSearchByEdgeAndId( sourceId, edge2.getType(), maxVersion, targetId2.getType(), null ) ).toBlocking() .getIterator(); results = gm.loadEdgesFromSourceByType( createSearchByEdgeAndIdUnfiltered( sourceId, edge1.getType(), maxVersion, targetId1.getType(), null ) ) .toBlocking().getIterator(); results = gm.loadEdgesFromSourceByType( createSearchByEdgeAndId( sourceId, edge1.getType(), maxVersion, targetId1.getType(), null ) ).toBlocking() .getIterator(); results = gm.loadEdgesFromSourceByType( createSearchByEdgeAndIdUnfiltered( sourceId, edge2.getType(), maxVersion, targetId2.getType(), null ) ) .toBlocking().getIterator(); results = gm.loadEdgesFromSourceByType( createSearchByEdgeAndId( sourceId, edge2.getType(), maxVersion, targetId2.getType(), null ) ).toBlocking() .getIterator(); results = gm.loadEdgesFromSourceByType( createSearchByEdgeAndIdUnfiltered( sourceId, edge1.getType(), maxVersion, targetId1.getType(), null ) ) .toBlocking().getIterator(); results = gm.loadEdgesFromSourceByType(
results = gm.loadEdgesFromSourceByType( createSearchByEdgeAndId( sourceId, edge1.getType(), maxVersion, targetId1.getType(), null ) ).toBlocking() .getIterator(); results = gm.loadEdgesFromSourceByType( createSearchByEdgeAndId( sourceId, edge2.getType(), maxVersion, targetId2.getType(), null ) ).toBlocking() .getIterator(); results = gm.loadEdgesFromSourceByType( createSearchByEdgeAndId( sourceId, edge1.getType(), maxVersion, targetId1.getType(), null ) ).toBlocking() .getIterator(); results = gm.loadEdgesFromSourceByType( createSearchByEdgeAndId( sourceId, edge2.getType(), maxVersion, targetId2.getType(), null ) ).toBlocking() .getIterator(); results = gm.loadEdgesFromSourceByType( createSearchByEdgeAndIdUnfiltered( sourceId, edge1.getType(), maxVersion, targetId1.getType(), null ) ) .toBlocking().getIterator(); results = gm.loadEdgesFromSourceByType( createSearchByEdgeAndIdUnfiltered( sourceId, edge2.getType(), maxVersion, targetId2.getType(), null ) ) .toBlocking().getIterator();
results = gm.loadEdgesFromSourceByType( createSearchByEdgeAndId( sourceId, edge1.getType(), maxVersion, targetId1.getType(), null ) ).toBlocking() .getIterator(); results = gm.loadEdgesFromSourceByType( createSearchByEdgeAndId( sourceId, edge1.getType(), maxVersion, targetId1.getType(), null ) ).toBlocking() .getIterator();
@Test public void testWriteReadEdgeTypeTargetTypeSource() { GraphManager gm = emf.createEdgeManager( scope ); Edge edge = createEdge( "source", "test", "target" ); gm.writeEdge( edge ).toBlocking().last(); //now test retrieving it SearchByIdType search = createSearchByEdgeAndId( edge.getSourceNode(), edge.getType(), edge.getTimestamp(), edge.getTargetNode().getType(), null ); Observable<MarkedEdge> edges = gm.loadEdgesFromSourceByType( search ); //implicitly blows up if more than 1 is returned from "single" Edge returned = edges.toBlocking().single(); assertEquals( "Correct edge returned", edge, returned ); //change edge type to be invalid, shouldn't get a result search = createSearchByEdgeAndId( edge.getSourceNode(), edge.getType(), edge.getTimestamp(), edge.getTargetNode().getType() + "invalid", null ); edges = gm.loadEdgesFromSourceByType( search ); //implicitly blows up if more than 1 is returned from "single" returned = edges.toBlocking().singleOrDefault( null ); assertNull( "Invalid type should not be returned", returned ); }
edge.getTargetNode().getType(), null ); edges = gm.loadEdgesFromSourceByType( searchById ); edges = gm.loadEdgesFromSourceByType( searchById );