Repository: nifi
Updated Branches:
  refs/heads/master 33dc3e36f -> f019d509f


NIFI-3918: Added Choice mapping to JsonTreeRowRecordReader.


Project: http://git-wip-us.apache.org/repos/asf/nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/f019d509
Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/f019d509
Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/f019d509

Branch: refs/heads/master
Commit: f019d509f38afc0685f361647ee20f798583dfa8
Parents: 33dc3e3
Author: Koji Kawamura <ijokaruma...@apache.org>
Authored: Wed May 17 14:23:42 2017 +0900
Committer: Mark Payne <marka...@hotmail.com>
Committed: Wed May 17 09:49:11 2017 -0400

----------------------------------------------------------------------
 .../nifi/json/JsonTreeRowRecordReader.java      |  3 ++
 .../nifi/json/TestJsonTreeRowRecordReader.java  | 31 ++++++++++++++++++++
 2 files changed, 34 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/nifi/blob/f019d509/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/json/JsonTreeRowRecordReader.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/json/JsonTreeRowRecordReader.java
 
b/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/json/JsonTreeRowRecordReader.java
index b542ebe..792c774 100644
--- 
a/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/json/JsonTreeRowRecordReader.java
+++ 
b/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/json/JsonTreeRowRecordReader.java
@@ -186,6 +186,9 @@ public class JsonTreeRowRecordReader extends 
AbstractJsonRowRecordReader {
                     return null;
                 }
             }
+            case CHOICE: {
+                return DataTypeUtils.convertType(getRawNodeValue(fieldNode), 
desiredType, fieldName);
+            }
         }
 
         return null;

http://git-wip-us.apache.org/repos/asf/nifi/blob/f019d509/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/json/TestJsonTreeRowRecordReader.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/json/TestJsonTreeRowRecordReader.java
 
b/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/json/TestJsonTreeRowRecordReader.java
index d0534ff..c83d0dc 100644
--- 
a/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/json/TestJsonTreeRowRecordReader.java
+++ 
b/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/json/TestJsonTreeRowRecordReader.java
@@ -44,6 +44,7 @@ import org.apache.nifi.serialization.record.Record;
 import org.apache.nifi.serialization.record.RecordField;
 import org.apache.nifi.serialization.record.RecordFieldType;
 import org.apache.nifi.serialization.record.RecordSchema;
+import org.apache.nifi.serialization.record.type.ChoiceDataType;
 import org.junit.Assert;
 import org.junit.Ignore;
 import org.junit.Test;
@@ -184,6 +185,36 @@ public class TestJsonTreeRowRecordReader {
     }
 
     @Test
+    public void testSingleJsonElementWithChoiceFields() throws IOException, 
MalformedRecordException {
+        // Wraps default fields by Choice data type to test mapping to a 
Choice type.
+        final List<RecordField> choiceFields = getDefaultFields().stream()
+                .map(f -> new RecordField(f.getFieldName(), 
RecordFieldType.CHOICE.getChoiceDataType(f.getDataType()))).collect(Collectors.toList());
+        final RecordSchema schema = new SimpleRecordSchema(choiceFields);
+
+        try (final InputStream in = new FileInputStream(new 
File("src/test/resources/json/single-bank-account.json"));
+             final JsonTreeRowRecordReader reader = new 
JsonTreeRowRecordReader(in, Mockito.mock(ComponentLog.class), schema, 
dateFormat, timeFormat, timestampFormat)) {
+
+            final List<String> fieldNames = schema.getFieldNames();
+            final List<String> expectedFieldNames = Arrays.asList(new String[] 
{"id", "name", "balance", "address", "city", "state", "zipCode", "country"});
+            assertEquals(expectedFieldNames, fieldNames);
+
+            final List<RecordFieldType> expectedTypes = Arrays.asList(new 
RecordFieldType[] {RecordFieldType.INT, RecordFieldType.STRING,
+                    RecordFieldType.DOUBLE, RecordFieldType.STRING, 
RecordFieldType.STRING, RecordFieldType.STRING, RecordFieldType.STRING, 
RecordFieldType.STRING});
+            final List<RecordField> fields = schema.getFields();
+            for (int i = 0; i < schema.getFields().size(); i++) {
+                assertTrue(fields.get(i).getDataType() instanceof 
ChoiceDataType);
+                final ChoiceDataType choiceDataType = (ChoiceDataType) 
fields.get(i).getDataType();
+                assertEquals(expectedTypes.get(i), 
choiceDataType.getPossibleSubTypes().get(0).getFieldType());
+            }
+
+            final Object[] firstRecordValues = reader.nextRecord().getValues();
+            Assert.assertArrayEquals(new Object[] {1, "John Doe", 4750.89, 
"123 My Street", "My City", "MS", "11111", "USA"}, firstRecordValues);
+
+            assertNull(reader.nextRecord());
+        }
+    }
+
+    @Test
     public void testElementWithNestedData() throws IOException, 
MalformedRecordException {
         final DataType accountType = 
RecordFieldType.RECORD.getRecordDataType(getAccountSchema());
         final List<RecordField> fields = getDefaultFields();

Reply via email to