Search in sources :

Example 1 with AdjacencyMaps

use of uk.gov.gchq.gaffer.data.graph.adjacency.AdjacencyMaps in project Gaffer by gchq.

the class GetWalksHandler method doOperation.

@Override
public Iterable<Walk> doOperation(final GetWalks getWalks, final Context context, final Store store) throws OperationException {
    // Check input
    if (null == getWalks.getInput()) {
        return null;
    }
    // Check there are some operations
    if (null == getWalks.getOperations()) {
        return new EmptyClosableIterable<>();
    }
    final Integer resultLimit = getWalks.getResultsLimit();
    final int hops = getWalks.getNumberOfGetEdgeOperations();
    final LimitedCloseableIterable limitedInputItr = new LimitedCloseableIterable<>(getWalks.getInput(), 0, resultLimit, false);
    final List<EntityId> originalInput = Lists.newArrayList(limitedInputItr);
    // Check hops and maxHops (if set)
    if (hops == 0) {
        return new EmptyClosableIterable<>();
    } else if (maxHops != null && hops > maxHops) {
        throw new OperationException("GetWalks operation contains " + hops + " hops. The maximum number of hops is: " + maxHops);
    }
    final AdjacencyMaps adjacencyMaps = prune && !getWalks.isIncludePartial() ? new PrunedAdjacencyMaps() : new SimpleAdjacencyMaps();
    final EntityMaps entityMaps = new SimpleEntityMaps();
    List<?> seeds = originalInput;
    // Execute the operations
    for (final OperationChain<Iterable<Element>> operation : getWalks.getOperations()) {
        if (isWhileOperation(operation)) {
            seeds = executeWhileOperation(operation, seeds, resultLimit, context, store, hops, adjacencyMaps, entityMaps);
        } else {
            seeds = executeOperation(operation, seeds, resultLimit, context, store, hops, adjacencyMaps, entityMaps);
        }
    }
    // requested by the user.
    if (entityMaps.size() == adjacencyMaps.size()) {
        entityMaps.add(new EntityMap());
    }
    final GraphWindow graphWindow = new GraphWindow(adjacencyMaps, entityMaps);
    // Track/recombine the edge objects and convert to return type
    final Stream<Walk> walks = Streams.toStream(originalInput).flatMap(seed -> walk(seed.getVertex(), null, graphWindow, new LinkedList<>(), new LinkedList<>(), hops, getWalks.isIncludePartial()).stream());
    return applyConditionalFiltering(walks, getWalks, context, store);
}
Also used : Walk(uk.gov.gchq.gaffer.data.graph.Walk) LimitedCloseableIterable(uk.gov.gchq.gaffer.commonutil.iterable.LimitedCloseableIterable) LimitedCloseableIterable(uk.gov.gchq.gaffer.commonutil.iterable.LimitedCloseableIterable) EmptyClosableIterable(uk.gov.gchq.gaffer.commonutil.iterable.EmptyClosableIterable) EmptyClosableIterable(uk.gov.gchq.gaffer.commonutil.iterable.EmptyClosableIterable) PrunedAdjacencyMaps(uk.gov.gchq.gaffer.data.graph.adjacency.PrunedAdjacencyMaps) SimpleEntityMaps(uk.gov.gchq.gaffer.data.graph.entity.SimpleEntityMaps) UnwrapEntityId(uk.gov.gchq.gaffer.data.element.function.UnwrapEntityId) EntityId(uk.gov.gchq.gaffer.data.element.id.EntityId) GraphWindow(uk.gov.gchq.gaffer.data.graph.GraphWindow) SimpleEntityMaps(uk.gov.gchq.gaffer.data.graph.entity.SimpleEntityMaps) EntityMaps(uk.gov.gchq.gaffer.data.graph.entity.EntityMaps) EntityMap(uk.gov.gchq.gaffer.data.graph.entity.EntityMap) PrunedAdjacencyMaps(uk.gov.gchq.gaffer.data.graph.adjacency.PrunedAdjacencyMaps) AdjacencyMaps(uk.gov.gchq.gaffer.data.graph.adjacency.AdjacencyMaps) SimpleAdjacencyMaps(uk.gov.gchq.gaffer.data.graph.adjacency.SimpleAdjacencyMaps) SimpleAdjacencyMaps(uk.gov.gchq.gaffer.data.graph.adjacency.SimpleAdjacencyMaps) OperationException(uk.gov.gchq.gaffer.operation.OperationException)

Aggregations

EmptyClosableIterable (uk.gov.gchq.gaffer.commonutil.iterable.EmptyClosableIterable)1 LimitedCloseableIterable (uk.gov.gchq.gaffer.commonutil.iterable.LimitedCloseableIterable)1 UnwrapEntityId (uk.gov.gchq.gaffer.data.element.function.UnwrapEntityId)1 EntityId (uk.gov.gchq.gaffer.data.element.id.EntityId)1 GraphWindow (uk.gov.gchq.gaffer.data.graph.GraphWindow)1 Walk (uk.gov.gchq.gaffer.data.graph.Walk)1 AdjacencyMaps (uk.gov.gchq.gaffer.data.graph.adjacency.AdjacencyMaps)1 PrunedAdjacencyMaps (uk.gov.gchq.gaffer.data.graph.adjacency.PrunedAdjacencyMaps)1 SimpleAdjacencyMaps (uk.gov.gchq.gaffer.data.graph.adjacency.SimpleAdjacencyMaps)1 EntityMap (uk.gov.gchq.gaffer.data.graph.entity.EntityMap)1 EntityMaps (uk.gov.gchq.gaffer.data.graph.entity.EntityMaps)1 SimpleEntityMaps (uk.gov.gchq.gaffer.data.graph.entity.SimpleEntityMaps)1 OperationException (uk.gov.gchq.gaffer.operation.OperationException)1