Search in sources :

Example 1 with EntityMap

use of uk.gov.gchq.gaffer.data.graph.entity.EntityMap in project Gaffer by gchq.

the class GetWalksHandler method executeOperation.

private List<?> executeOperation(final Output<Iterable<Element>> operation, final List<?> seeds, final Integer resultLimit, final Context context, final Store store, final int hops, final AdjacencyMaps adjacencyMaps, final EntityMaps entityMaps) throws OperationException {
    final Iterable<Element> results = executeOperation(operation, seeds, resultLimit, context, store);
    final AdjacencyMap adjacencyMap = new AdjacencyMap();
    final EntityMap entityMap = new EntityMap();
    final List<Object> nextSeeds = new ArrayList<>();
    for (final Element e : results) {
        if (e instanceof Edge) {
            final Edge edge = (Edge) e;
            final Object nextSeed = edge.getAdjacentMatchedVertexValue();
            nextSeeds.add(nextSeed);
            adjacencyMap.putEdge(edge.getMatchedVertexValue(), nextSeed, edge);
        } else {
            final Entity entity = (Entity) e;
            entityMap.putEntity(entity.getVertex(), entity);
        }
    }
    if (hops > adjacencyMaps.size()) {
        adjacencyMaps.add(adjacencyMap);
    }
    entityMaps.add(entityMap);
    return nextSeeds;
}
Also used : Entity(uk.gov.gchq.gaffer.data.element.Entity) EntityMap(uk.gov.gchq.gaffer.data.graph.entity.EntityMap) AdjacencyMap(uk.gov.gchq.gaffer.data.graph.adjacency.AdjacencyMap) Element(uk.gov.gchq.gaffer.data.element.Element) ArrayList(java.util.ArrayList) Edge(uk.gov.gchq.gaffer.data.element.Edge)

Example 2 with EntityMap

use of uk.gov.gchq.gaffer.data.graph.entity.EntityMap 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

EntityMap (uk.gov.gchq.gaffer.data.graph.entity.EntityMap)2 ArrayList (java.util.ArrayList)1 EmptyClosableIterable (uk.gov.gchq.gaffer.commonutil.iterable.EmptyClosableIterable)1 LimitedCloseableIterable (uk.gov.gchq.gaffer.commonutil.iterable.LimitedCloseableIterable)1 Edge (uk.gov.gchq.gaffer.data.element.Edge)1 Element (uk.gov.gchq.gaffer.data.element.Element)1 Entity (uk.gov.gchq.gaffer.data.element.Entity)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 AdjacencyMap (uk.gov.gchq.gaffer.data.graph.adjacency.AdjacencyMap)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 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