/** * Create the search edge from the source. The nodes being searched are Target nodes on the edges */ public static SearchEdge createSearchEdgeFromSource( final Edge edge ) { return new SearchEdgeImpl( edge.getSourceNode(), edge.getType(), SearchEdge.NodeType.TARGET ); }
/** * Create the search edge from the target. The nodes being searched are source nodes on the edges */ public static SearchEdge createSearchEdgeFromTarget( final Edge edge ) { return new SearchEdgeImpl( edge.getTargetNode(), edge.getType(), SearchEdge.NodeType.SOURCE ); }
@Override public String call(Edge edge) { return buildDistinctKey(edge.getSourceNode().getUuid().toString(), edge.getTargetNode().getUuid().toString(), edge.getType().toLowerCase()); } }
@Override public String call(Edge edge) { return buildDistinctKey(edge.getSourceNode().getUuid().toString(), edge.getTargetNode().getUuid().toString(), edge.getType().toLowerCase()); } }
@Nullable @Override public MarkedEdge apply( @Nullable final Edge input ) { if ( input == null ) { return null; } if ( input instanceof MarkedEdge ) { return ( MarkedEdge ) input; } return new SimpleMarkedEdge( input.getSourceNode(), input.getType(), input.getTargetNode(), input.getTimestamp(), false ); } };
@Override protected Iterator<MarkedEdge> getIterator() { return storageEdgeSerialization.getEdgeVersions( scope, new SimpleSearchByEdge( edge.getSourceNode(), edge.getType(), edge.getTargetNode(), Long.MAX_VALUE, SearchByEdgeType.Order.DESCENDING, Optional.absent() ) ); } } ).filter( markedEdge -> markedEdge.isDeleted() ).flatMap( marked ->
/** * Get the index scope for the edge from the source to the target. The entity being indexed * is the target node */ public static IndexEdge generateScopeFromSource( final Edge edge ) { return new IndexEdgeImpl( edge.getSourceNode(), edge.getType(), SearchEdge.NodeType.TARGET, edge.getTimestamp() ); }
@Override public void queueNewEdge(final ApplicationScope applicationScope, final Id entityId, final Edge newEdge, QueueIndexingStrategy queueIndexingStrategy) { if (logger.isTraceEnabled()) { logger.trace("Offering EdgeIndexEvent for edge type {} entity {}:{}", newEdge.getType(), entityId.getUuid(), entityId.getType()); } offer( new EdgeIndexEvent( queueFig.getPrimaryRegion(), applicationScope, entityId, newEdge ), queueIndexingStrategy); }
/** * Get the index scope for the edge from the source. The entity being indexed is the source node */ public static IndexEdge generateScopeFromTarget( final Edge edge ) { return new IndexEdgeImpl( edge.getTargetNode(), edge.getType(), SearchEdge.NodeType.SOURCE, edge.getTimestamp() ); }
@Override public MutationBatch removeEdgeTypeToTarget( final ApplicationScope scope, final Edge edge ) { return removeEdgeTypeToTarget( scope, edge.getTargetNode(), edge.getType(), edge.getTimestamp() ); }
@Override public MutationBatch removeEdgeTypeFromSource( final ApplicationScope scope, final Edge edge ) { return removeEdgeTypeFromSource( scope, edge.getSourceNode(), edge.getType(), edge.getTimestamp() ); }
@Override public MutationBatch removeEdgeTypeFromSource( final ApplicationScope scope, final Edge edge ) { return removeEdgeTypeFromSource( scope, edge.getSourceNode(), edge.getType(), edge.getTimestamp() ); }
@Override public MutationBatch removeEdgeTypeToTarget( final ApplicationScope scope, final Edge edge ) { return removeEdgeTypeToTarget( scope, edge.getTargetNode(), edge.getType(), edge.getTimestamp() ); }
@Override public void queueDeleteEdge(final ApplicationScope applicationScope, final Edge edge) { if (logger.isTraceEnabled()) { logger.trace("Offering EdgeDeleteEvent for type {} to target {}:{}", edge.getType(), edge.getTargetNode().getUuid(), edge.getTargetNode().getType()); } // sent in region (not offerTopic) as the delete IO happens in-region, then queues a multi-region de-index op offer( new EdgeDeleteEvent( queueFig.getPrimaryRegion(), applicationScope, edge ), AsyncEventQueueType.DELETE , null); }
@Override public MutationBatch removeIdTypeToTarget( final ApplicationScope scope, final Edge edge ) { return removeIdTypeToTarget( scope, edge.getTargetNode(), edge.getType(), edge.getSourceNode().getType(), edge.getTimestamp() ); }
@Override public MutationBatch removeIdTypeFromSource( final ApplicationScope scope, final Edge edge ) { return removeIdTypeFromSource( scope, edge.getSourceNode(), edge.getType(), edge.getTargetNode().getType(), edge.getTimestamp() ); }
@Override public MutationBatch removeIdTypeToTarget( final ApplicationScope scope, final Edge edge ) { return removeIdTypeToTarget( scope, edge.getTargetNode(), edge.getType(), edge.getSourceNode().getType(), edge.getTimestamp() ); }
/** * Validate an edge input * * @param e The edge to validate */ public static void validateEdge( Edge e ) { Preconditions.checkNotNull( e, "edge is required" ); ValidationUtils.verifyIdentity( e.getSourceNode() ); ValidationUtils.verifyIdentity( e.getTargetNode() ); ValidationUtils.verifyString( e.getType(), "type" ); validateTimestamp( e.getTimestamp(), "timestamp" ); }
@Override public MutationBatch removeIdTypeFromSource( final ApplicationScope scope, final Edge edge ) { return removeIdTypeFromSource( scope, edge.getSourceNode(), edge.getType(), edge.getTargetNode().getType(), edge.getTimestamp() ); }
/** * Compares edges based on their sourceId, type, targetId and timestamp. It ignores the deleted flag * @param expected * @param asserted */ private void assertEdgeData(final Edge expected, final Edge asserted){ assertEquals("SourceId the same", expected.getSourceNode(), asserted.getSourceNode()); assertEquals("TargetId the same", expected.getTargetNode(), asserted.getTargetNode()); assertEquals("Type the same", expected.getType(), asserted.getType()); assertEquals("Timestamp the same", expected.getTimestamp(), asserted.getTimestamp()); } }