tpalfy commented on a change in pull request #3611: NIFI-6009 ScanKudu Processor
URL: https://github.com/apache/nifi/pull/3611#discussion_r331472782
 
 

 ##########
 File path: 
nifi-nar-bundles/nifi-kudu-bundle/nifi-kudu-processors/src/main/java/org/apache/nifi/processors/kudu/AbstractKuduProcessor.java
 ##########
 @@ -260,4 +285,123 @@ protected Update updateRecordToKudu(KuduTable kuduTable, 
Record record, List<Str
         return update;
     }
 
-}
\ No newline at end of file
+
+    /**
+     * Serializes a row from Kudu to a JSON document of the form:
+     *
+     * {
+     *    "rows": [
+     *      {
+     *          "columnname-1" : "value1",
+     *          "columnname-2" : "value2",
+     *          "columnname-3" : "value3",
+     *          "columnname-4" : "value4",
+     *      },
+     *      {
+     *          "columnname-1" : "value1",
+     *          "columnname-2" : "value2",
+     *          "columnname-3" : "value3",
+     *          "columnname-4" : "value4",
+     *      }
+     *    ]
+     * }
+     */
+    protected String convertToJson(RowResult row) {
+        final StringBuilder jsonBuilder = new StringBuilder();
+        jsonBuilder.append("{");
+        Iterator<ColumnSchema> columns = 
row.getSchema().getColumns().iterator();
+        while (columns.hasNext()) {
+            ColumnSchema col = columns.next();
+            jsonBuilder.append("\"" + col.getName() + "\":");
+            switch (col.getType()) {
+                case STRING:
+                    jsonBuilder.append("\"" + row.getString(col.getName()) + 
"\"");
+                    break;
+                case INT8:
+                    jsonBuilder.append("\"" + row.getByte(col.getName()) + 
"\"");
+                    break;
+                case INT16:
+                    jsonBuilder.append("\"" + row.getShort(col.getName()) + 
"\"");
+                    break;
+                case INT32:
+                    jsonBuilder.append("\"" + row.getInt(col.getName()) + 
"\"");
+                    break;
+                case INT64:
+                    jsonBuilder.append("\"" + row.getLong(col.getName()) + 
"\"");
+                    break;
+                case BOOL:
+                    jsonBuilder.append("\"" + row.getBoolean(col.getName()) + 
"\"");
+                    break;
+                case DECIMAL:
+                    jsonBuilder.append("\"" + row.getDecimal(col.getName()) + 
"\"");
+                    break;
+                case FLOAT:
+                    jsonBuilder.append("\"" + row.getFloat(col.getName()) + 
"\"");
+                    break;
+                case DOUBLE:
+                    jsonBuilder.append("\"" + row.getDouble(col.getName()) + 
"\"");
+                    break;
+                case UNIXTIME_MICROS:
+                    jsonBuilder.append("\"" + row.getLong(col.getName()) + 
"\"");
+                    break;
+                case BINARY:
+                    jsonBuilder.append("\"0x" + 
Hex.encodeHexString(row.getBinaryCopy(col.getName())) + "\"");
+                    break;
+                default:
+                    break;
+            }
+            if(columns.hasNext())
+                jsonBuilder.append(",");
+        }
+        jsonBuilder.append("}");
+        return jsonBuilder.toString();
+    }
+
+    protected Object parseValue(String value, ColumnSchema columnSchema) {
+        Object  parsedValue;
+        Type type = columnSchema.getType();
+
+        switch (type) {
+            case STRING:
+                if (value.isEmpty()) {
+                    throw new IllegalStateException(String.format("give value 
is Empty for type %s", type));
+                }
+                parsedValue = value;
+                break;
+            case INT8:
+                parsedValue = Integer.valueOf(value);
+                break;
+            case INT16:
+                parsedValue = Integer.valueOf(value);
+                break;
+            case INT32:
+                parsedValue = Integer.valueOf(value);
+                break;
+            case INT64:
+                parsedValue = Long.valueOf(value);
+                break;
+            case BOOL:
+                parsedValue = Boolean.valueOf(value);
+                break;
+            case FLOAT:
+                parsedValue = Float.valueOf(value);
+                break;
+            case DOUBLE:
+                parsedValue = Double.valueOf(value);
+                break;
+            case DECIMAL:
+                parsedValue = new BigDecimal(value);
+                break;
+            case UNIXTIME_MICROS:
+                parsedValue = Long.valueOf(value);
+                break;
+            case BINARY:
+                parsedValue = Byte.valueOf(value);
 
 Review comment:
   This should return a byte `array`, not a byte.
   Not sure in what format the user should be able to provide a value here but 
to be consistent with the JSON output, imo we should expect a hexadecimal.
   
   So the implementation could be:
   ```java
                   try {
                       parsedValue = Hex.decodeHex(value);
                   } catch (DecoderException e) {
                       throw new RuntimeException(e);
                   }
   ```
   

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

Reply via email to