use of uk.gov.gchq.gaffer.operation.Operation in project Gaffer by gchq.
the class Store method runJob.
private JobDetail runJob(final Operation operation, final JobDetail jobDetail, final Context context) {
final OperationChain<?> clonedOp = (operation instanceof Operations) ? (OperationChain) operation.shallowClone() : OperationChain.wrap(operation).shallowClone();
if (isSupported(ExportToGafferResultCache.class)) {
boolean hasExport = false;
for (final Operation op : clonedOp.getOperations()) {
if (op instanceof ExportToGafferResultCache) {
hasExport = true;
break;
}
}
if (!hasExport) {
clonedOp.getOperations().add(new ExportToGafferResultCache());
}
}
runAsync(() -> {
try {
handleOperation(clonedOp, context);
addOrUpdateJobDetail(clonedOp, context, null, JobStatus.FINISHED);
} catch (final Error e) {
addOrUpdateJobDetail(clonedOp, context, e.getMessage(), JobStatus.FAILED);
throw e;
} catch (final Exception e) {
LOGGER.warn("Operation chain job failed to execute", e);
addOrUpdateJobDetail(clonedOp, context, e.getMessage(), JobStatus.FAILED);
}
});
return jobDetail;
}
use of uk.gov.gchq.gaffer.operation.Operation in project Gaffer by gchq.
the class OperationChainValidator method validateInputOutputTypes.
protected Class<? extends Output> validateInputOutputTypes(final Operation operation, final ValidationResult validationResult, final Store store, final Class<? extends Output> input) {
Class<? extends Output> output = input;
if (null == input) {
if (operation instanceof Output) {
output = ((Output) operation).getClass();
}
} else {
final Operation firstOp = getFirstOperation(operation);
if (firstOp instanceof Input) {
final Class<?> outputType = OperationUtil.getOutputType(input);
final Class<?> inputType = OperationUtil.getInputType(((Input) firstOp));
validationResult.add(OperationUtil.isValid(outputType, inputType));
} else {
validationResult.addError("Invalid combination of operations: " + input.getName() + " -> " + firstOp.getClass().getName() + ". " + input.getClass().getSimpleName() + " has an output but " + firstOp.getClass().getSimpleName() + " does not take an input.");
}
if (operation instanceof Output) {
output = ((Output) operation).getClass();
} else {
output = null;
}
}
return output;
}
use of uk.gov.gchq.gaffer.operation.Operation in project Gaffer by gchq.
the class FilterToOperationConverterTest method testSingleGroupNotInSchema.
@Test
public void testSingleGroupNotInSchema() {
final Schema schema = getSchema();
final SparkSession sparkSession = SparkSessionProvider.getSparkSession();
final Filter[] filters = new Filter[1];
filters[0] = new EqualTo(SchemaToStructTypeConverter.GROUP, "random");
final FiltersToOperationConverter converter = new FiltersToOperationConverter(getViewFromSchema(schema), schema, filters);
final Operation operation = converter.getOperation();
assertNull(operation);
}
use of uk.gov.gchq.gaffer.operation.Operation in project Gaffer by gchq.
the class FilterToOperationConverterTest method testSingleGroup.
@Test
public void testSingleGroup() {
final Schema schema = getSchema();
final SparkSession sparkSession = SparkSessionProvider.getSparkSession();
final Filter[] filters = new Filter[1];
filters[0] = new EqualTo(SchemaToStructTypeConverter.GROUP, ENTITY_GROUP);
final FiltersToOperationConverter converter = new FiltersToOperationConverter(getViewFromSchema(schema), schema, filters);
final Operation operation = converter.getOperation();
assertTrue(operation instanceof GetRDDOfAllElements);
assertEquals(Collections.singleton(ENTITY_GROUP), ((GraphFilters) operation).getView().getEntityGroups());
assertEquals(0, ((GraphFilters) operation).getView().getEdgeGroups().size());
}
use of uk.gov.gchq.gaffer.operation.Operation in project Gaffer by gchq.
the class FilterToOperationConverterTest method testSpecifyVertexAndPropertyFilter.
@Test
public void testSpecifyVertexAndPropertyFilter() {
final Schema schema = getSchema();
final SparkSession sparkSession = SparkSessionProvider.getSparkSession();
// Specify vertex and a filter on property1
Filter[] filters = new Filter[2];
filters[0] = new GreaterThan("property1", 5);
filters[1] = new EqualTo(SchemaToStructTypeConverter.VERTEX_COL_NAME, "0");
FiltersToOperationConverter converter = new FiltersToOperationConverter(getViewFromSchema(schema), schema, filters);
Operation operation = converter.getOperation();
assertTrue(operation instanceof GetRDDOfElements);
assertEquals(1, ((GraphFilters) operation).getView().getEntityGroups().size());
assertEquals(0, ((GraphFilters) operation).getView().getEdgeGroups().size());
final Set<EntityId> seeds = new HashSet<>();
for (final Object seed : ((GetRDDOfElements) operation).getInput()) {
seeds.add((EntitySeed) seed);
}
assertEquals(Collections.singleton(new EntitySeed("0")), seeds);
View opView = ((GraphFilters) operation).getView();
List<TupleAdaptedPredicate<String, ?>> entityPostAggFilters = opView.getEntity(ENTITY_GROUP).getPostAggregationFilterFunctions();
assertThat(entityPostAggFilters).hasSize(1);
final ArrayList<String> expectedProperties = new ArrayList<>();
expectedProperties.add("property1");
assertThat(entityPostAggFilters.get(0).getSelection()).hasSize(1);
assertEquals(expectedProperties.get(0), entityPostAggFilters.get(0).getSelection()[0]);
final ArrayList<Predicate> expectedFunctions = new ArrayList<>();
expectedFunctions.add(new IsMoreThan(5, false));
assertEquals(expectedFunctions.get(0), entityPostAggFilters.get(0).getPredicate());
// Specify vertex and filters on properties property1 and property4
filters = new Filter[3];
filters[0] = new GreaterThan("property1", 5);
filters[1] = new EqualTo(SchemaToStructTypeConverter.VERTEX_COL_NAME, "0");
filters[2] = new LessThan("property4", 8);
converter = new FiltersToOperationConverter(getViewFromSchema(schema), schema, filters);
operation = converter.getOperation();
assertTrue(operation instanceof GetRDDOfElements);
assertEquals(1, ((GraphFilters) operation).getView().getEntityGroups().size());
assertEquals(0, ((GraphFilters) operation).getView().getEdgeGroups().size());
seeds.clear();
for (final Object seed : ((GetRDDOfElements) operation).getInput()) {
seeds.add((EntitySeed) seed);
}
assertEquals(Collections.singleton(new EntitySeed("0")), seeds);
opView = ((GraphFilters) operation).getView();
entityPostAggFilters = opView.getEntity(ENTITY_GROUP).getPostAggregationFilterFunctions();
assertThat(entityPostAggFilters).hasSize(2);
expectedProperties.clear();
expectedProperties.add("property1");
expectedProperties.add("property4");
assertThat(entityPostAggFilters.get(0).getSelection()).hasSize(1);
assertEquals(expectedProperties.get(0), entityPostAggFilters.get(0).getSelection()[0]);
assertThat(entityPostAggFilters.get(1).getSelection()).hasSize(1);
assertEquals(expectedProperties.get(1), entityPostAggFilters.get(1).getSelection()[0]);
expectedFunctions.clear();
expectedFunctions.add(new IsMoreThan(5, false));
expectedFunctions.add(new IsLessThan(8, false));
assertEquals(expectedFunctions.get(0), entityPostAggFilters.get(0).getPredicate());
assertEquals(expectedFunctions.get(1), entityPostAggFilters.get(1).getPredicate());
}
Aggregations