Search in sources :

Example 1 with Filter

use of uk.gov.gchq.gaffer.operation.impl.function.Filter in project Gaffer by gchq.

the class ViewMigration method createMigrationOps.

public static List<Operation> createMigrationOps(final boolean aggregateAfter, final Iterable<ViewMigration> views) {
    final ViewMigration viewMig = new ViewMigration(aggregateAfter);
    for (final ViewMigration view : views) {
        viewMig.edgesPostAggregationFilter.putAll(view.edgesPostAggregationFilter);
        viewMig.entitiesPostAggregationFilter.putAll(view.entitiesPostAggregationFilter);
        viewMig.edgesPostTransformFilter.putAll(view.edgesPostTransformFilter);
        viewMig.entitiesPostTransformFilter.putAll(view.entitiesPostTransformFilter);
        viewMig.edgesTransformer.putAll(view.edgesTransformer);
        viewMig.entitiesTransformer.putAll(view.entitiesTransformer);
    }
    final List<Operation> updatedOps = new ArrayList<>();
    if (aggregateAfter) {
        final Aggregate aggregate = new Aggregate();
        updatedOps.add(aggregate);
        if (!viewMig.entitiesPostAggregationFilter.isEmpty() || !viewMig.edgesPostAggregationFilter.isEmpty()) {
            final Filter postAggregationFilter = new Filter.Builder().entities(viewMig.entitiesPostAggregationFilter).edges(viewMig.edgesPostAggregationFilter).build();
            updatedOps.add(postAggregationFilter);
        }
        if (!viewMig.entitiesTransformer.isEmpty() || !viewMig.edgesTransformer.isEmpty()) {
            final Transform transformFunction = new Transform.Builder().entities(viewMig.entitiesTransformer).edges(viewMig.edgesTransformer).build();
            updatedOps.add(transformFunction);
        }
        if (!viewMig.edgesPostTransformFilter.isEmpty() || !viewMig.entitiesPostTransformFilter.isEmpty()) {
            final Filter postTransformFilter = new Filter.Builder().entities(viewMig.entitiesPostTransformFilter).edges(viewMig.edgesPostTransformFilter).build();
            updatedOps.add(postTransformFilter);
        }
    }
    return updatedOps;
}
Also used : Filter(uk.gov.gchq.gaffer.operation.impl.function.Filter) TransformAndFilter(uk.gov.gchq.gaffer.graph.hook.migrate.predicate.TransformAndFilter) ElementFilter(uk.gov.gchq.gaffer.data.element.function.ElementFilter) ArrayList(java.util.ArrayList) Operation(uk.gov.gchq.gaffer.operation.Operation) Aggregate(uk.gov.gchq.gaffer.operation.impl.function.Aggregate) Transform(uk.gov.gchq.gaffer.operation.impl.function.Transform)

Example 2 with Filter

use of uk.gov.gchq.gaffer.operation.impl.function.Filter in project Gaffer by gchq.

the class FilterHandlerTest method shouldFailValidationWhenTypeArgumentOfPredicateIsIncorrect.

@Test
public void shouldFailValidationWhenTypeArgumentOfPredicateIsIncorrect() {
    // Given
    final Schema schema = new Schema.Builder().edge(TestGroups.EDGE, new SchemaEdgeDefinition.Builder().source("junctionA").destination("junctionB").property(TestPropertyNames.COUNT, "count.long").build()).edge(TestGroups.EDGE, new SchemaEdgeDefinition.Builder().source("junctionA").destination("junctionB").property(TestPropertyNames.COUNT, "count.long").build()).type("count.long", new TypeDefinition(Long.class)).build();
    given(store.getSchema()).willReturn(schema);
    final Edge edge = new Edge.Builder().group(TestGroups.EDGE).source("junctionA").dest("junctionB").property(TestPropertyNames.COUNT, 2L).build();
    final Edge edge1 = new Edge.Builder().group(TestGroups.EDGE).source("junctionA").dest("junctionB").property(TestPropertyNames.COUNT, 1L).build();
    input.add(edge);
    input.add(edge1);
    final Filter filter = new Filter.Builder().input(input).globalEdges(new ElementFilter.Builder().select(TestPropertyNames.COUNT).execute(new IsMoreThan("abcd")).build()).build();
    assertThatExceptionOfType(OperationException.class).isThrownBy(() -> handler.doOperation(filter, context, store)).withMessageContaining("is not compatible with the input type:");
}
Also used : Filter(uk.gov.gchq.gaffer.operation.impl.function.Filter) ElementFilter(uk.gov.gchq.gaffer.data.element.function.ElementFilter) Schema(uk.gov.gchq.gaffer.store.schema.Schema) ElementFilter(uk.gov.gchq.gaffer.data.element.function.ElementFilter) SchemaEdgeDefinition(uk.gov.gchq.gaffer.store.schema.SchemaEdgeDefinition) IsMoreThan(uk.gov.gchq.koryphe.impl.predicate.IsMoreThan) Edge(uk.gov.gchq.gaffer.data.element.Edge) TypeDefinition(uk.gov.gchq.gaffer.store.schema.TypeDefinition) Test(org.junit.jupiter.api.Test)

Example 3 with Filter

use of uk.gov.gchq.gaffer.operation.impl.function.Filter in project Gaffer by gchq.

the class FilterHandlerTest method shouldFilterByGroup.

@Test
public void shouldFilterByGroup() throws OperationException {
    // Given
    given(store.getSchema()).willReturn(SCHEMA);
    final Edge edge = new Edge.Builder().group(TestGroups.EDGE).source("junctionA").dest("junctionB").directed(true).property(TestPropertyNames.COUNT, 2L).build();
    final Edge edge1 = new Edge.Builder().group(TestGroups.EDGE_2).source("junctionA").dest("junctionB").directed(true).property(TestPropertyNames.COUNT, 1L).build();
    final Edge edge2 = new Edge.Builder().group(TestGroups.EDGE).source("junctionB").dest("junctionA").directed(true).property(TestPropertyNames.COUNT, 4L).build();
    final Edge edge3 = new Edge.Builder().group(TestGroups.EDGE_3).source("junctionC").dest("junctionB").directed(true).property(TestPropertyNames.COUNT, 3L).build();
    input.add(edge);
    input.add(edge1);
    input.add(edge2);
    input.add(edge3);
    expected.add(edge1);
    final Filter filter = new Filter.Builder().input(input).edge(TestGroups.EDGE_2).build();
    // When
    final Iterable<? extends Element> results = handler.doOperation(filter, context, store);
    // Then
    final List<Element> resultsList = Lists.newArrayList(results);
    assertEquals(expected, resultsList);
}
Also used : Filter(uk.gov.gchq.gaffer.operation.impl.function.Filter) ElementFilter(uk.gov.gchq.gaffer.data.element.function.ElementFilter) Element(uk.gov.gchq.gaffer.data.element.Element) Edge(uk.gov.gchq.gaffer.data.element.Edge) Test(org.junit.jupiter.api.Test)

Example 4 with Filter

use of uk.gov.gchq.gaffer.operation.impl.function.Filter in project Gaffer by gchq.

the class FilterHandlerTest method shouldReturnNoResultsWhenGlobalElementsFails.

@Test
public void shouldReturnNoResultsWhenGlobalElementsFails() throws OperationException {
    // Given
    given(store.getSchema()).willReturn(SCHEMA);
    final Edge edge = new Edge.Builder().group(TestGroups.EDGE).source("junctionA").dest("junctionB").directed(true).property(TestPropertyNames.COUNT, 2L).build();
    final Edge edge1 = new Edge.Builder().group(TestGroups.EDGE_2).source("junctionA").dest("junctionB").directed(true).property(TestPropertyNames.COUNT, 1L).build();
    final Edge edge2 = new Edge.Builder().group(TestGroups.EDGE).source("junctionB").dest("junctionA").directed(true).property(TestPropertyNames.COUNT, 4L).build();
    final Entity entity = new Entity.Builder().group(TestGroups.ENTITY).property(TestPropertyNames.COUNT, 3L).build();
    final Entity entity1 = new Entity.Builder().group(TestGroups.ENTITY_2).property(TestPropertyNames.COUNT, 4L).build();
    final Entity entity2 = new Entity.Builder().group(TestGroups.ENTITY_3).property(TestPropertyNames.COUNT, 6L).build();
    input.add(edge);
    input.add(edge1);
    input.add(edge2);
    input.add(entity);
    input.add(entity1);
    input.add(entity2);
    final Filter filter = new Filter.Builder().input(input).globalElements(new ElementFilter.Builder().select(TestPropertyNames.COUNT).execute(new IsMoreThan(10L)).build()).globalEdges(new ElementFilter.Builder().select(TestPropertyNames.COUNT).execute(new IsMoreThan(2L)).build()).build();
    // When
    final Iterable<? extends Element> results = handler.doOperation(filter, context, store);
    // Then
    final List<Element> resultsList = Lists.newArrayList(results);
    assertEquals(expected, resultsList);
}
Also used : Entity(uk.gov.gchq.gaffer.data.element.Entity) Filter(uk.gov.gchq.gaffer.operation.impl.function.Filter) ElementFilter(uk.gov.gchq.gaffer.data.element.function.ElementFilter) ElementFilter(uk.gov.gchq.gaffer.data.element.function.ElementFilter) Element(uk.gov.gchq.gaffer.data.element.Element) IsMoreThan(uk.gov.gchq.koryphe.impl.predicate.IsMoreThan) Edge(uk.gov.gchq.gaffer.data.element.Edge) Test(org.junit.jupiter.api.Test)

Example 5 with Filter

use of uk.gov.gchq.gaffer.operation.impl.function.Filter in project Gaffer by gchq.

the class FilterHandlerTest method shouldFailValidationWhenSchemaElementDefinitionsAreNull.

@Test
public void shouldFailValidationWhenSchemaElementDefinitionsAreNull() {
    // Given
    given(store.getSchema()).willReturn(new Schema());
    final Edge edge = new Edge.Builder().group(TestGroups.EDGE).source("junctionA").dest("junctionB").directed(true).property(TestPropertyNames.COUNT, 2L).build();
    final Edge edge1 = new Edge.Builder().group(TestGroups.EDGE).source("junctionA").dest("junctionB").directed(true).property(TestPropertyNames.COUNT, 1L).build();
    input.add(edge);
    input.add(edge1);
    final Filter filter = new Filter.Builder().input(input).edge(TestGroups.EDGE).build();
    // When / Then
    assertThatExceptionOfType(OperationException.class).isThrownBy(() -> handler.doOperation(filter, context, store)).withMessageContaining("Edge group: " + TestGroups.EDGE + " does not exist in the schema");
}
Also used : Filter(uk.gov.gchq.gaffer.operation.impl.function.Filter) ElementFilter(uk.gov.gchq.gaffer.data.element.function.ElementFilter) Schema(uk.gov.gchq.gaffer.store.schema.Schema) Edge(uk.gov.gchq.gaffer.data.element.Edge) Test(org.junit.jupiter.api.Test)

Aggregations

Filter (uk.gov.gchq.gaffer.operation.impl.function.Filter)16 Test (org.junit.jupiter.api.Test)14 ElementFilter (uk.gov.gchq.gaffer.data.element.function.ElementFilter)14 Edge (uk.gov.gchq.gaffer.data.element.Edge)12 Element (uk.gov.gchq.gaffer.data.element.Element)8 Schema (uk.gov.gchq.gaffer.store.schema.Schema)6 IsMoreThan (uk.gov.gchq.koryphe.impl.predicate.IsMoreThan)6 Entity (uk.gov.gchq.gaffer.data.element.Entity)4 ArrayList (java.util.ArrayList)2 FederatedFilterHandler (uk.gov.gchq.gaffer.federatedstore.operation.handler.FederatedFilterHandler)2 Context (uk.gov.gchq.gaffer.store.Context)2 TypeDefinition (uk.gov.gchq.gaffer.store.schema.TypeDefinition)2 Strings (com.google.common.base.Strings)1 Sets (com.google.common.collect.Sets)1 Collection (java.util.Collection)1 Collections (java.util.Collections)1 HashMap (java.util.HashMap)1 List (java.util.List)1 Map (java.util.Map)1 Objects.isNull (java.util.Objects.isNull)1