use of uk.gov.gchq.koryphe.impl.function.Concat in project gaffer-doc by gchq.
the class ConcatExample method concatObjects.
public void concatObjects() {
// ---------------------------------------------------------
final Concat function = new Concat();
// ---------------------------------------------------------
runExample(function, null, new Tuple2<>("foo", "bar"), new Tuple2<>("foo", null), new Tuple2<>("foo", ""), new Tuple2<>("foo", 1.2), new Tuple2<>(null, "bar"), new Tuple2<>(1, 2));
}
use of uk.gov.gchq.koryphe.impl.function.Concat in project gaffer-doc by gchq.
the class GetElementsExample method getEntitiesAndReturnOnlySomeProperties.
public CloseableIterable<? extends Element> getEntitiesAndReturnOnlySomeProperties() {
// ---------------------------------------------------------
final Concat concat = new Concat();
concat.setSeparator("|");
final GetElements operation = new GetElements.Builder().input(new EntitySeed(2)).view(new View.Builder().edge("edge", new ViewElementDefinition.Builder().transientProperty("vertex|count", String.class).properties("vertex|count").transformer(new ElementTransformer.Builder().select(IdentifierType.SOURCE.name(), "count").execute(concat).project("vertex|count").build()).build()).build()).build();
return runExample(operation, null);
}
use of uk.gov.gchq.koryphe.impl.function.Concat in project Gaffer by gchq.
the class GetRDDOfAllElementsHandlerIT method testGetAllElementsInRDDWithView.
private void testGetAllElementsInRDDWithView(final Graph graph, final GetRDDOfAllElements getRDD) throws OperationException {
final Set<Element> expectedElements = new HashSet<>();
getElements().stream().filter(e -> e.getGroup().equals(TestGroups.EDGE)).map(e -> (Edge) e).map(e -> {
e.putProperty("newProperty", e.getSource().toString() + "," + e.getProperty(TestPropertyNames.COUNT));
return e;
}).filter(e -> e.getProperty("newProperty").equals("0,2")).forEach(expectedElements::add);
getRDD.setView(new View.Builder().edge(TestGroups.EDGE, new ViewElementDefinition.Builder().transientProperty("newProperty", String.class).transformer(new ElementTransformer.Builder().select(IdentifierType.SOURCE.name(), TestPropertyNames.COUNT).execute(new Concat()).project("newProperty").build()).postTransformFilter(new ElementFilter.Builder().select("newProperty").execute(new IsEqual("0,2")).build()).build()).build());
final RDD<Element> rdd = graph.execute(getRDD, USER);
if (rdd == null) {
fail("No RDD returned");
}
final Element[] returnedElements = (Element[]) rdd.collect();
final Set<Element> results = new HashSet<>(Arrays.asList(returnedElements));
assertEquals(expectedElements, results);
}
use of uk.gov.gchq.koryphe.impl.function.Concat in project Gaffer by gchq.
the class RoadTrafficCsvElementGenerator2Test method shouldParseSampleDataWithGenericFunctions.
@Test
public void shouldParseSampleDataWithGenericFunctions() throws IOException {
// Given
CsvLinesToMaps parseCsv = new CsvLinesToMaps().header("Region Name (GO)", "ONS LACode", "ONS LA Name", "CP", "S Ref E", "S Ref N", "Road", "A-Junction", "A Ref E", "A Ref N", "B-Junction", "B Ref E", "B Ref N", "RCat", "iDir", "Year", "dCount", "Hour", "PC", "2WMV", "CAR", "BUS", "LGV", "HGVR2", "HGVR3", "HGVR4", "HGVA3", "HGVA5", "HGVA6", "HGV", "AMV").firstRow(1);
IterableFunction<Map<String, Object>, Tuple<String>> toTuples = new IterableFunction<>(new MapToTuple<String>());
IterableFunction<Tuple<String>, Tuple<String>> transformTuples = new IterableFunction(new FunctionChain.Builder<>().execute(new String[] { "Road", "A-Junction" }, new Concat(":"), new String[] { "A-Junction" }).execute(new String[] { "Road", "B-Junction" }, new Concat(":"), new String[] { "B-Junction" }).execute(new String[] { "A Ref E", "A Ref N" }, new Concat(), new String[] { "A-Location" }).execute(new String[] { "B Ref E", "B Ref N" }, new Concat(), new String[] { "B-Location" }).execute(new String[] { "THIS" }, new CreateRoadTrafficFreqMap(), new String[] { "countByVehicleType" }).execute(new String[] { "countByVehicleType" }, new CallMethod("getTotal"), new String[] { "total-count" }).execute(new String[] { "dCount" }, new ParseTime().timeZone("UTC"), new String[] { "timestamp" }).execute(new String[] { "Hour" }, new FunctionChain(new ToInteger(), new MultiplyBy(60 * 60 * 1000), new ToLong()), new String[] { "hoursInMilliseconds" }).execute(new String[] { "timestamp", "hoursInMilliseconds" }, new FunctionChain(new ApplyBiFunction<>(new Sum()), new ToString(), new ParseDate()), new String[] { "startDate" }).execute(new String[] { "startDate" }, new DateToTimeBucketEnd(TimeBucket.HOUR), new String[] { "endDate" }).build());
TuplesToElements toElements = new TuplesToElements().element(new ElementTupleDefinition("RegionContainsLocation").source("Region Name (GO)").destination("ONS LA Name")).element(new ElementTupleDefinition("LocationContainsRoad").source("ONS LA Name").destination("Road")).element(new ElementTupleDefinition("RoadHasJunction").source("Road").destination("A-Junction")).element(new ElementTupleDefinition("RoadHasJunction").source("Road").destination("B-Junction")).element(new ElementTupleDefinition("JunctionLocatedAt").source("A-Junction").destination("A-Location")).element(new ElementTupleDefinition("JunctionLocatedAt").source("B-Junction").destination("B-Location")).element(new ElementTupleDefinition("RoadUse").source("A-Junction").destination("B-Junction").property("startDate").property("endDate").property("countByVehicleType").property("count", "total-count")).element(new ElementTupleDefinition("JunctionUse").vertex("A-Junction").property("startDate").property("endDate").property("countByVehicleType").property("count", "total-count")).element(new ElementTupleDefinition("JunctionUse").vertex("B-Junction").property("startDate").property("endDate").property("countByVehicleType").property("count", "total-count"));
HyperLogLogPlusEntityGenerator addCardinalities = new HyperLogLogPlusEntityGenerator().countProperty("count").edgeGroupProperty("edgeGroup").cardinalityPropertyName("hllp");
// Apply functions
final FunctionChain<List<String>, Iterable<Element>> generator2 = new FunctionChain.Builder<List<String>, Iterable<Element>>().execute(parseCsv).execute(toTuples).execute(transformTuples).execute(toElements).execute(addCardinalities).build();
// Uncomment the following for debugging
// System.out.println(new String(JSONSerialiser.serialise(generator2, true)));
final List<String> lines = IOUtils.readLines(createInputStream());
final List<Element> elements2 = Lists.newArrayList(generator2.apply(lines));
// Then - the results should be the same as those generated using the original element generator
final RoadTrafficStringElementGenerator generator1 = new RoadTrafficStringElementGenerator();
final List<Element> elements1;
try (final InputStream inputStream = createInputStream()) {
elements1 = Lists.newArrayList(generator1.apply(() -> new LineIterator(new InputStreamReader(inputStream))));
}
JSONSerialiser.getMapper();
SimpleClassNameCache.setUseFullNameForSerialisation(false);
elements1.forEach(e -> e.removeProperty("hllp"));
elements2.forEach(e -> e.removeProperty("hllp"));
ElementUtil.assertElementEquals(elements1, elements2);
}
use of uk.gov.gchq.koryphe.impl.function.Concat in project Gaffer by gchq.
the class TransformationIT method shouldCreateTransientEdgeProperty.
@Test
@TraitRequirement(StoreTrait.TRANSFORMATION)
public void shouldCreateTransientEdgeProperty() throws OperationException {
// Given
final GetElements getEdges = new GetElements.Builder().input(new EdgeSeed(SOURCE_1, DEST_1, false)).view(new View.Builder().edge(TestGroups.EDGE, new ViewElementDefinition.Builder().transientProperty(TestPropertyNames.TRANSIENT_1, String.class).transformer(new ElementTransformer.Builder().select(IdentifierType.SOURCE.name(), TestPropertyNames.INT).execute(new Concat()).project(TestPropertyNames.TRANSIENT_1).build()).build()).build()).build();
// When
final List<Element> results = Lists.newArrayList(graph.execute(getEdges, getUser()));
assertThat(results).isNotNull();
for (final Element result : results) {
assertThat(result.getProperty(TestPropertyNames.TRANSIENT_1)).isEqualTo(SOURCE_1 + "," + result.getProperty(TestPropertyNames.INT));
}
}
Aggregations