use of uk.gov.gchq.gaffer.data.element.function.ElementFilter in project Gaffer by gchq.
the class GraphTest method shouldExpandAllEdges.
@Test
public void shouldExpandAllEdges() throws OperationException {
final Schema twoEdgesNoEntities = new Schema.Builder().type(TestTypes.PROP_STRING, new TypeDefinition.Builder().clazz(String.class).build()).type("vertex", new TypeDefinition.Builder().clazz(String.class).build()).edge("firstEdge", new SchemaEdgeDefinition.Builder().property(TestPropertyNames.PROP_1, TestTypes.PROP_STRING).aggregate(false).source("vertex").destination("vertex").directed(DIRECTED_EITHER).build()).edge("secondEdge", new SchemaEdgeDefinition.Builder().property(TestPropertyNames.PROP_1, TestTypes.PROP_STRING).aggregate(false).source("vertex").destination("vertex").directed(DIRECTED_EITHER).build()).build();
final Store store = mock(Store.class);
final ArgumentCaptor<OperationChain> capturedOperation = ArgumentCaptor.forClass(OperationChain.class);
final ArgumentCaptor<Context> capturedContext = ArgumentCaptor.forClass(Context.class);
given(store.getSchema()).willReturn(twoEdgesNoEntities);
given(store.getOriginalSchema()).willReturn(twoEdgesNoEntities);
given(store.getProperties()).willReturn(mock(StoreProperties.class));
final Graph graph = new Graph.Builder().config(new GraphConfig.Builder().graphId(GRAPH_ID).build()).storeProperties(StreamUtil.storeProps(getClass())).store(store).addSchema(twoEdgesNoEntities).build();
final ElementFilter filter = mock(ElementFilter.class);
final GlobalViewElementDefinition globalEdgeAggregate = new GlobalViewElementDefinition.Builder().postAggregationFilter(filter).build();
final View view = new View.Builder().allEdges(true).build();
operation = new GetElements.Builder().view(view).build();
opChain = new OperationChain.Builder().first(operation).build();
graph.execute(opChain, context);
Mockito.verify(store, Mockito.times(1)).execute(capturedOperation.capture(), capturedContext.capture());
assertEquals(1, capturedOperation.getAllValues().size());
final OperationChain transformedOpChain = capturedOperation.getAllValues().get(0);
assertEquals(1, transformedOpChain.getOperations().size());
assertEquals(GetElements.class, transformedOpChain.getOperations().get(0).getClass());
final View mergedView = ((GetElements) transformedOpChain.getOperations().get(0)).getView();
assertTrue(mergedView.isAllEdges());
assertEquals(2, mergedView.getEdges().size());
}
use of uk.gov.gchq.gaffer.data.element.function.ElementFilter in project Gaffer by gchq.
the class SchemaTest method testLoadingSchemaFromJson.
@Test
public void testLoadingSchemaFromJson() {
// Edge definitions
SchemaElementDefinition edgeDefinition = schema.getEdge(TestGroups.EDGE);
assertNotNull(edgeDefinition);
assertEquals(EDGE_DESCRIPTION, edgeDefinition.getDescription());
final Map<String, String> propertyMap = edgeDefinition.getPropertyMap();
assertThat(propertyMap).hasSize(3);
assertEquals("prop.string", propertyMap.get(TestPropertyNames.PROP_2));
assertEquals("prop.date", propertyMap.get(TestPropertyNames.DATE));
assertEquals("timestamp", propertyMap.get(TestPropertyNames.TIMESTAMP));
assertEquals(Sets.newLinkedHashSet(Collections.singletonList(TestPropertyNames.DATE)), edgeDefinition.getGroupBy());
// Check validator
ElementFilter validator = edgeDefinition.getValidator();
List<TupleAdaptedPredicate<String, ?>> valContexts = validator.getComponents();
int index = 0;
TupleAdaptedPredicate<String, ?> tuplePredicate = valContexts.get(index++);
assertTrue(tuplePredicate.getPredicate() instanceof IsA);
assertThat(tuplePredicate.getSelection()).hasSize(1);
assertEquals(IdentifierType.SOURCE.name(), tuplePredicate.getSelection()[0]);
tuplePredicate = valContexts.get(index++);
assertTrue(tuplePredicate.getPredicate() instanceof IsA);
assertThat(tuplePredicate.getSelection()).hasSize(1);
assertEquals(IdentifierType.DESTINATION.name(), tuplePredicate.getSelection()[0]);
tuplePredicate = valContexts.get(index++);
assertTrue(tuplePredicate.getPredicate() instanceof IsA);
assertThat(tuplePredicate.getSelection()).hasSize(1);
assertEquals(IdentifierType.DIRECTED.name(), tuplePredicate.getSelection()[0]);
tuplePredicate = valContexts.get(index++);
assertTrue(tuplePredicate.getPredicate() instanceof ExampleFilterFunction);
assertThat(tuplePredicate.getSelection()).hasSize(1);
assertEquals(IdentifierType.DIRECTED.name(), tuplePredicate.getSelection()[0]);
tuplePredicate = valContexts.get(index++);
assertTrue(tuplePredicate.getPredicate() instanceof IsA);
assertThat(tuplePredicate.getSelection()).hasSize(1);
assertEquals(TestPropertyNames.PROP_2, tuplePredicate.getSelection()[0]);
tuplePredicate = valContexts.get(index++);
assertTrue(tuplePredicate.getPredicate() instanceof ExampleFilterFunction);
assertThat(tuplePredicate.getSelection()).hasSize(1);
assertEquals(TestPropertyNames.PROP_2, tuplePredicate.getSelection()[0]);
tuplePredicate = valContexts.get(index++);
assertTrue(tuplePredicate.getPredicate() instanceof IsA);
assertThat(tuplePredicate.getSelection()).hasSize(1);
assertEquals(TestPropertyNames.DATE, tuplePredicate.getSelection()[0]);
tuplePredicate = valContexts.get(index++);
assertTrue(tuplePredicate.getPredicate() instanceof IsA);
assertThat(tuplePredicate.getSelection()).hasSize(1);
assertEquals(TestPropertyNames.TIMESTAMP, tuplePredicate.getSelection()[0]);
assertEquals(index, valContexts.size());
TypeDefinition type = edgeDefinition.getPropertyTypeDef(TestPropertyNames.DATE);
assertEquals(Date.class, type.getClazz());
assertEquals(DATE_TYPE_DESCRIPTION, type.getDescription());
assertNull(type.getSerialiser());
assertTrue(type.getAggregateFunction() instanceof ExampleAggregateFunction);
// Entity definitions
SchemaElementDefinition entityDefinition = schema.getEntity(TestGroups.ENTITY);
assertNotNull(entityDefinition);
assertEquals(ENTITY_DESCRIPTION, entityDefinition.getDescription());
assertTrue(entityDefinition.containsProperty(TestPropertyNames.PROP_1));
type = entityDefinition.getPropertyTypeDef(TestPropertyNames.PROP_1);
assertEquals(0, entityDefinition.getGroupBy().size());
assertEquals(STRING_TYPE_DESCRIPTION, type.getDescription());
assertEquals(String.class, type.getClazz());
assertNull(type.getSerialiser());
assertTrue(type.getAggregateFunction() instanceof ExampleAggregateFunction);
validator = entityDefinition.getValidator();
valContexts = validator.getComponents();
index = 0;
tuplePredicate = valContexts.get(index++);
assertTrue(tuplePredicate.getPredicate() instanceof IsXMoreThanY);
assertThat(tuplePredicate.getSelection()).hasSize(2);
assertEquals(TestPropertyNames.PROP_1, tuplePredicate.getSelection()[0]);
assertEquals(TestPropertyNames.VISIBILITY, tuplePredicate.getSelection()[1]);
tuplePredicate = valContexts.get(index++);
assertTrue(tuplePredicate.getPredicate() instanceof IsA);
assertThat(tuplePredicate.getSelection()).hasSize(1);
assertEquals(IdentifierType.VERTEX.name(), tuplePredicate.getSelection()[0]);
tuplePredicate = valContexts.get(index++);
assertTrue(tuplePredicate.getPredicate() instanceof IsA);
assertThat(tuplePredicate.getSelection()).hasSize(1);
assertEquals(TestPropertyNames.PROP_1, tuplePredicate.getSelection()[0]);
final ElementAggregator aggregator = edgeDefinition.getFullAggregator();
final List<TupleAdaptedBinaryOperator<String, ?>> aggContexts = aggregator.getComponents();
assertThat(aggContexts).hasSize(3);
TupleAdaptedBinaryOperator<String, ?> aggContext = aggContexts.get(0);
assertTrue(aggContext.getBinaryOperator() instanceof ExampleAggregateFunction);
assertThat(aggContext.getSelection()).hasSize(1);
assertEquals(TestPropertyNames.PROP_2, aggContext.getSelection()[0]);
aggContext = aggContexts.get(1);
assertTrue(aggContext.getBinaryOperator() instanceof ExampleAggregateFunction);
assertThat(aggContext.getSelection()).hasSize(1);
assertEquals(TestPropertyNames.DATE, aggContext.getSelection()[0]);
TypeDefinition mapTypeDef = schema.getType(TestTypes.PROP_MAP);
assertEquals(LinkedHashMap.class, mapTypeDef.getClazz());
assertEquals(MAP_TYPE_DESCRIPTION, mapTypeDef.getDescription());
Serialiser serialiser = mapTypeDef.getSerialiser();
assertEquals(MapSerialiser.class, serialiser.getClass());
MapSerialiser mapSerialiser = (MapSerialiser) serialiser;
assertEquals(StringSerialiser.class, mapSerialiser.getKeySerialiser().getClass());
assertEquals(RawLongSerialiser.class, mapSerialiser.getValueSerialiser().getClass());
assertNull(mapSerialiser.getMapClass());
}
use of uk.gov.gchq.gaffer.data.element.function.ElementFilter in project Gaffer by gchq.
the class SchemaElementDefinitionTest method shouldReturnFullValidatorWithoutIsA.
@Test
public void shouldReturnFullValidatorWithoutIsA() {
// Given
final T elementDef = createBuilder().property("property", PROPERTY_STRING_TYPE).property("property1", PROPERTY_STRING_TYPE).property("property2", PROPERTY_STRING_TYPE).validator(new ElementFilter.Builder().select("property1", "property2").execute(new IsXMoreThanY()).build()).build();
setupSchema(elementDef);
// When
final ElementFilter validator = elementDef.getValidator(false);
// Then
int i = 0;
assertEquals(IsXMoreThanY.class, validator.getComponents().get(i).getPredicate().getClass());
assertArrayEquals(new String[] { "property1", "property2" }, validator.getComponents().get(i).getSelection());
i++;
assertEquals(Exists.class, validator.getComponents().get(i).getPredicate().getClass());
assertArrayEquals(new String[] { "property" }, validator.getComponents().get(i).getSelection());
i++;
assertEquals(Exists.class, validator.getComponents().get(i).getPredicate().getClass());
assertArrayEquals(new String[] { "property1" }, validator.getComponents().get(i).getSelection());
i++;
assertEquals(Exists.class, validator.getComponents().get(i).getPredicate().getClass());
assertArrayEquals(new String[] { "property2" }, validator.getComponents().get(i).getSelection());
i++;
assertEquals(i, validator.getComponents().size());
// Check the validator is cached
// Check the validator is cached
assertSame(validator, elementDef.getValidator(false));
assertNotSame(validator, elementDef.getValidator(true));
}
use of uk.gov.gchq.gaffer.data.element.function.ElementFilter in project Gaffer by gchq.
the class SchemaElementDefinitionTest method shouldBuildElementDefinition.
@Test
public void shouldBuildElementDefinition() {
// Given
final ElementFilter validator = mock(ElementFilter.class);
// When
final T elementDef = createBuilder().property(TestPropertyNames.PROP_1, "property.integer").property(TestPropertyNames.PROP_2, "property.object").validator(validator).build();
setupSchema(elementDef);
// Then
assertEquals(2, elementDef.getProperties().size());
assertEquals(Integer.class, elementDef.getPropertyClass(TestPropertyNames.PROP_1));
assertEquals(Object.class, elementDef.getPropertyClass(TestPropertyNames.PROP_2));
assertSame(validator, elementDef.getOriginalValidator());
}
use of uk.gov.gchq.gaffer.data.element.function.ElementFilter in project Gaffer by gchq.
the class SchemaElementDefinitionValidatorTest method shouldValidateFunctionSelectionsAndReturnFalseWhenFunctionTypeDoesNotEqualSelectionType.
@Test
public void shouldValidateFunctionSelectionsAndReturnFalseWhenFunctionTypeDoesNotEqualSelectionType() {
// Given
final SchemaElementDefinition elementDef = mock(SchemaElementDefinition.class);
given(elementDef.getPropertyClass("selection")).willReturn((Class) String.class);
final IsMoreThan function = new IsMoreThan(5);
final ElementFilter elementFilter = new ElementFilter.Builder().select("selection").execute(function).build();
final SchemaElementDefinitionValidator validator = new SchemaElementDefinitionValidator();
// When
final ValidationResult result = validator.validateFunctionArgumentTypes(elementFilter, elementDef);
// Then
assertFalse(result.isValid());
assertEquals("Validation errors: \nControl value class java.lang.Integer is not compatible" + " with the input type: class java.lang.String", result.getErrorString());
}
Aggregations