static Object extractField(String fieldName, Object current) { if (current instanceof SamzaSqlRelRecord) { SamzaSqlRelRecord record = (SamzaSqlRelRecord) current; Validate.isTrue(record.getFieldNames().contains(fieldName), String.format("Invalid field %s in %s", fieldName, record)); return record.getField(fieldName).orElse(null); } else if (current instanceof Map) { Map map = (Map) current; Validate.isTrue(map.containsKey(fieldName), String.format("Invalid field %s in %s", fieldName, map)); return map.get(fieldName); } else if (current instanceof List && fieldName.endsWith("]")) { List list = (List) current; int index = Integer.parseInt(fieldName.substring(fieldName.indexOf("[") + 1, fieldName.length() - 1)); return list.get(index); } throw new IllegalArgumentException(String.format( "Unsupported accessing operation for data type: %s with field: %s.", current.getClass(), fieldName)); } }
@Test public void testGetField() { SamzaSqlRelMessage message = new SamzaSqlRelMessage(names, values, new SamzaSqlRelMsgMetadata("", "", "")); Assert.assertEquals(values.get(0), message.getSamzaSqlRelRecord().getField(names.get(0)).get()); Assert.assertEquals(values.get(1), message.getSamzaSqlRelRecord().getField(names.get(1)).get()); }
Assert.assertEquals(message.getSamzaSqlRelRecord().getFieldNames().size(), ComplexRecord.SCHEMA$.getFields().size() + 1); Assert.assertEquals(message.getSamzaSqlRelRecord().getField("id").get(), id); Assert.assertEquals(message.getSamzaSqlRelRecord().getField("bool_value").get(), boolValue); Assert.assertEquals(message.getSamzaSqlRelRecord().getField("double_value").get(), doubleValue); Assert.assertEquals(message.getSamzaSqlRelRecord().getField("string_value").get(), new Utf8(testStrValue)); Assert.assertEquals(message.getSamzaSqlRelRecord().getField("float_value").get(), doubleValue); Assert.assertEquals(message.getSamzaSqlRelRecord().getField("long_value").get(), longValue); Assert.assertTrue( arrayValue.stream() .map(Utf8::new) .collect(Collectors.toList()) .equals(message.getSamzaSqlRelRecord().getField("array_values").get())); Assert.assertTrue(mapValue.entrySet() .stream() .collect(Collectors.toMap(x -> new Utf8(x.getKey()), y -> new Utf8(y.getValue()))) .equals(message.getSamzaSqlRelRecord().getField("map_values").get())); Arrays.equals(((ByteString) message.getSamzaSqlRelRecord().getField("bytes_value").get()).getBytes(), testBytes.array())); Assert.assertTrue( Arrays.equals(((ByteString) message.getSamzaSqlRelRecord().getField("fixed_value").get()).getBytes(), DEFAULT_TRACKING_ID_BYTES));
@Test public void testGetNonExistentField() { SamzaSqlRelMessage message = new SamzaSqlRelMessage(names, values, new SamzaSqlRelMsgMetadata("", "", "")); Assert.assertFalse(message.getSamzaSqlRelRecord().getField("field3").isPresent()); }