embulk-output-kintone 1.0.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +65 -1
- data/build.gradle +1 -0
- data/classpath/commons-csv-1.9.0.jar +0 -0
- data/classpath/embulk-output-kintone-1.2.0.jar +0 -0
- data/classpath/externalsortinginjava-0.6.2.jar +0 -0
- data/classpath/{shadow-kintone-java-client-1.0.0-all.jar → shadow-kintone-java-client-1.2.0-all.jar} +0 -0
- data/src/main/java/org/embulk/output/kintone/KintoneClient.java +117 -0
- data/src/main/java/org/embulk/output/kintone/KintoneColumnOption.java +5 -0
- data/src/main/java/org/embulk/output/kintone/KintoneColumnType.java +226 -5
- data/src/main/java/org/embulk/output/kintone/KintoneColumnVisitor.java +82 -13
- data/src/main/java/org/embulk/output/kintone/KintoneMode.java +52 -4
- data/src/main/java/org/embulk/output/kintone/KintoneOutputPlugin.java +12 -20
- data/src/main/java/org/embulk/output/kintone/KintonePageOutput.java +123 -127
- data/src/main/java/org/embulk/output/kintone/KintoneSortColumn.java +33 -0
- data/src/main/java/org/embulk/output/kintone/PluginTask.java +32 -0
- data/src/main/java/org/embulk/output/kintone/deserializer/DeserializeApplier.java +19 -0
- data/src/main/java/org/embulk/output/kintone/deserializer/DeserializeException.java +7 -0
- data/src/main/java/org/embulk/output/kintone/deserializer/Deserializer.java +279 -0
- data/src/main/java/org/embulk/output/kintone/record/Id.java +18 -0
- data/src/main/java/org/embulk/output/kintone/record/IdOrUpdateKey.java +45 -0
- data/src/main/java/org/embulk/output/kintone/record/Skip.java +14 -0
- data/src/main/java/org/embulk/output/kintone/reducer/CSVInputColumnVisitor.java +78 -0
- data/src/main/java/org/embulk/output/kintone/reducer/CSVOutputColumnVisitor.java +79 -0
- data/src/main/java/org/embulk/output/kintone/reducer/ReduceException.java +11 -0
- data/src/main/java/org/embulk/output/kintone/reducer/ReduceType.java +190 -0
- data/src/main/java/org/embulk/output/kintone/reducer/ReducedPageOutput.java +100 -0
- data/src/main/java/org/embulk/output/kintone/reducer/Reducer.java +355 -0
- data/src/main/java/org/embulk/output/kintone/util/Lazy.java +20 -0
- data/src/test/java/org/embulk/output/kintone/KintoneClientTest.java +139 -0
- data/src/test/java/org/embulk/output/kintone/KintoneColumnOptionBuilder.java +7 -0
- data/src/test/java/org/embulk/output/kintone/KintoneColumnTypeTest.java +194 -0
- data/src/test/java/org/embulk/output/kintone/KintoneColumnVisitorTest.java +183 -64
- data/src/test/java/org/embulk/output/kintone/KintoneColumnVisitorVerifier.java +19 -9
- data/src/test/java/org/embulk/output/kintone/KintonePageOutputVerifier.java +120 -51
- data/src/test/java/org/embulk/output/kintone/MockClient.java +112 -0
- data/src/test/java/org/embulk/output/kintone/TestKintoneOutputPlugin.java +147 -22
- data/src/test/java/org/embulk/output/kintone/TestTaskMode.java +1 -0
- data/src/test/java/org/embulk/output/kintone/TestTaskReduce.java +47 -0
- data/src/test/java/org/embulk/output/kintone/TestTaskReduceException.java +50 -0
- data/src/test/java/org/embulk/output/kintone/TestTaskReduceSubtable.java +47 -0
- data/src/test/java/org/embulk/output/kintone/TestTaskSkip.java +80 -0
- data/src/test/java/org/embulk/output/kintone/TestTaskSkipId.java +80 -0
- data/src/test/java/org/embulk/output/kintone/deserializer/DeserializerTest.java +165 -0
- data/src/test/java/org/embulk/output/kintone/reducer/ReduceTypeTest.java +154 -0
- data/src/test/resources/org/embulk/output/kintone/client/config.yml +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/config.yml +2 -1
- data/src/test/resources/org/embulk/output/kintone/task/mode/config.yml +6 -0
- data/src/test/resources/org/embulk/output/kintone/task/mode/input.csv +7 -7
- data/src/test/resources/org/embulk/output/kintone/task/mode/insert_add_records.jsonl +6 -6
- data/src/test/resources/org/embulk/output/kintone/task/mode/{insert_add_ignore_nulls_records.jsonl → insert_ignore_nulls_add_records.jsonl} +2 -2
- data/src/test/resources/org/embulk/output/kintone/task/mode/{insert_add_prefer_nulls_records.jsonl → insert_prefer_nulls_add_records.jsonl} +6 -6
- data/src/test/resources/org/embulk/output/kintone/task/mode/{update_update_ignore_nulls_records.jsonl → update_ignore_nulls_update_records.jsonl} +2 -2
- data/src/test/resources/org/embulk/output/kintone/task/mode/{update_update_prefer_nulls_records.jsonl → update_prefer_nulls_update_records.jsonl} +3 -3
- data/src/test/resources/org/embulk/output/kintone/task/mode/update_update_records.jsonl +6 -6
- data/src/test/resources/org/embulk/output/kintone/task/mode/{upsert_add_records.jsonl → upsert_never_skip_add_records.jsonl} +2 -2
- data/src/test/resources/org/embulk/output/kintone/task/mode/upsert_never_skip_double_single_line_text_add_values.json +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/mode/{upsert_update_ignore_nulls_records.jsonl → upsert_never_skip_ignore_nulls_update_records.jsonl} +2 -2
- data/src/test/resources/org/embulk/output/kintone/task/mode/{upsert_add_prefer_nulls_records.jsonl → upsert_never_skip_prefer_nulls_add_records.jsonl} +3 -3
- data/src/test/resources/org/embulk/output/kintone/task/mode/{upsert_update_prefer_nulls_records.jsonl → upsert_never_skip_prefer_nulls_update_records.jsonl} +3 -3
- data/src/test/resources/org/embulk/output/kintone/task/mode/{upsert_update_records.jsonl → upsert_never_skip_update_records.jsonl} +4 -4
- data/src/test/resources/org/embulk/output/kintone/task/reduce/config.yml +171 -0
- data/src/test/resources/org/embulk/output/kintone/task/reduce/input.csv +7 -0
- data/src/test/resources/org/embulk/output/kintone/task/reduce/insert_add_records.jsonl +6 -0
- data/src/test/resources/org/embulk/output/kintone/task/reduce/insert_ignore_nulls_add_records.jsonl +6 -0
- data/src/test/resources/org/embulk/output/kintone/task/reduce/insert_prefer_nulls_add_records.jsonl +6 -0
- data/src/test/resources/org/embulk/output/kintone/task/reduce/update_ignore_nulls_update_records.jsonl +3 -0
- data/src/test/resources/org/embulk/output/kintone/task/reduce/update_prefer_nulls_update_records.jsonl +3 -0
- data/src/test/resources/org/embulk/output/kintone/task/reduce/update_update_records.jsonl +6 -0
- data/src/test/resources/org/embulk/output/kintone/task/reduce/upsert_never_skip_add_records.jsonl +2 -0
- data/src/test/resources/org/embulk/output/kintone/task/reduce/upsert_never_skip_double_single_line_text_add_values.json +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/reduce/upsert_never_skip_double_single_line_text_values.json +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/reduce/upsert_never_skip_ignore_nulls_add_records.jsonl +3 -0
- data/src/test/resources/org/embulk/output/kintone/task/reduce/upsert_never_skip_ignore_nulls_double_single_line_text_values.json +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/reduce/upsert_never_skip_ignore_nulls_update_records.jsonl +3 -0
- data/src/test/resources/org/embulk/output/kintone/task/reduce/upsert_never_skip_prefer_nulls_add_records.jsonl +3 -0
- data/src/test/resources/org/embulk/output/kintone/task/reduce/upsert_never_skip_prefer_nulls_double_single_line_text_values.json +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/reduce/upsert_never_skip_prefer_nulls_update_records.jsonl +3 -0
- data/src/test/resources/org/embulk/output/kintone/task/reduce/upsert_never_skip_update_records.jsonl +4 -0
- data/src/test/resources/org/embulk/output/kintone/task/reduce_exception/config.yml +36 -0
- data/src/test/resources/org/embulk/output/kintone/task/reduce_exception/derived_columns.json +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/reduce_exception/input.csv +13 -0
- data/src/test/resources/org/embulk/output/kintone/task/reduce_exception/insert_add_records.jsonl +2 -0
- data/src/test/resources/org/embulk/output/kintone/task/reduce_exception/update_update_records.jsonl +2 -0
- data/src/test/resources/org/embulk/output/kintone/task/reduce_subtable/config.yml +343 -0
- data/src/test/resources/org/embulk/output/kintone/task/reduce_subtable/derived_columns.json +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/reduce_subtable/input.csv +13 -0
- data/src/test/resources/org/embulk/output/kintone/task/reduce_subtable/insert_add_records.jsonl +6 -0
- data/src/test/resources/org/embulk/output/kintone/task/reduce_subtable/insert_ignore_nulls_add_records.jsonl +6 -0
- data/src/test/resources/org/embulk/output/kintone/task/reduce_subtable/insert_prefer_nulls_add_records.jsonl +6 -0
- data/src/test/resources/org/embulk/output/kintone/task/reduce_subtable/update_ignore_nulls_update_records.jsonl +3 -0
- data/src/test/resources/org/embulk/output/kintone/task/reduce_subtable/update_prefer_nulls_update_records.jsonl +3 -0
- data/src/test/resources/org/embulk/output/kintone/task/reduce_subtable/update_update_records.jsonl +6 -0
- data/src/test/resources/org/embulk/output/kintone/task/reduce_subtable/upsert_never_skip_double_single_line_text_values.json +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/reduce_subtable/upsert_never_skip_ignore_nulls_add_records.jsonl +3 -0
- data/src/test/resources/org/embulk/output/kintone/task/reduce_subtable/upsert_never_skip_ignore_nulls_double_single_line_text_values.json +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/reduce_subtable/upsert_never_skip_ignore_nulls_update_records.jsonl +3 -0
- data/src/test/resources/org/embulk/output/kintone/task/reduce_subtable/upsert_never_skip_prefer_nulls_add_records.jsonl +3 -0
- data/src/test/resources/org/embulk/output/kintone/task/reduce_subtable/upsert_never_skip_prefer_nulls_double_single_line_text_values.json +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/reduce_subtable/upsert_never_skip_prefer_nulls_update_records.jsonl +3 -0
- data/src/test/resources/org/embulk/output/kintone/task/reduce_subtable/upsert_never_skip_update_records.jsonl +6 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip/config.yml +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip/input.csv +7 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip/insert_add_records.jsonl +6 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip/insert_always_skip_add_records.jsonl +6 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip/insert_always_skip_prefer_nulls_add_records.jsonl +6 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip/insert_never_skip_add_records.jsonl +6 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip/insert_never_skip_prefer_nulls_add_records.jsonl +6 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip/insert_prefer_nulls_add_records.jsonl +6 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip/update_always_skip_long_number_add_values.json +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip/update_always_skip_long_number_values.json +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip/update_always_skip_prefer_nulls_long_number_add_values.json +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip/update_always_skip_prefer_nulls_long_number_values.json +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip/update_always_skip_prefer_nulls_update_records.jsonl +2 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip/update_always_skip_update_records.jsonl +5 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip/update_never_skip_update_records.jsonl +6 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip/update_prefer_nulls_update_records.jsonl +3 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip/update_update_records.jsonl +6 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip/upsert_add_records.jsonl +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip/upsert_always_skip_prefer_nulls_string_single_line_text_add_values.json +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip/upsert_always_skip_prefer_nulls_string_single_line_text_values.json +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip/upsert_always_skip_prefer_nulls_update_records.jsonl +2 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip/upsert_always_skip_string_single_line_text_add_values.json +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip/upsert_always_skip_string_single_line_text_values.json +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip/upsert_always_skip_update_records.jsonl +2 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip/upsert_never_skip_add_records.jsonl +4 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip/upsert_never_skip_prefer_nulls_add_records.jsonl +4 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip/upsert_never_skip_prefer_nulls_string_single_line_text_add_values.json +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip/upsert_never_skip_prefer_nulls_string_single_line_text_values.json +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip/upsert_never_skip_prefer_nulls_update_records.jsonl +2 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip/upsert_never_skip_string_single_line_text_add_values.json +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip/upsert_never_skip_string_single_line_text_values.json +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip/upsert_never_skip_update_records.jsonl +2 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip/upsert_prefer_nulls_add_records.jsonl +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip/upsert_prefer_nulls_string_single_line_text_add_values.json +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip/upsert_prefer_nulls_string_single_line_text_values.json +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip/upsert_prefer_nulls_update_records.jsonl +2 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip/upsert_string_single_line_text_add_values.json +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip/upsert_string_single_line_text_values.json +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip/upsert_update_records.jsonl +2 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip_id/config.yml +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip_id/input.csv +7 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip_id/insert_add_records.jsonl +6 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip_id/insert_always_skip_add_records.jsonl +6 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip_id/insert_always_skip_prefer_nulls_add_records.jsonl +6 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip_id/insert_never_skip_add_records.jsonl +6 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip_id/insert_never_skip_prefer_nulls_add_records.jsonl +6 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip_id/insert_prefer_nulls_add_records.jsonl +6 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip_id/update_always_skip__id_add_values.json +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip_id/update_always_skip__id_values.json +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip_id/update_always_skip_prefer_nulls__id_add_values.json +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip_id/update_always_skip_prefer_nulls__id_values.json +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip_id/update_always_skip_prefer_nulls_update_records.jsonl +2 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip_id/update_always_skip_update_records.jsonl +5 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip_id/update_never_skip_update_records.jsonl +6 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip_id/update_prefer_nulls_update_records.jsonl +3 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip_id/update_update_records.jsonl +6 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip_id/upsert__id_add_values.json +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip_id/upsert__id_values.json +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip_id/upsert_always_skip__id_add_values.json +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip_id/upsert_always_skip__id_values.json +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip_id/upsert_always_skip_prefer_nulls__id_add_values.json +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip_id/upsert_always_skip_prefer_nulls__id_values.json +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip_id/upsert_always_skip_prefer_nulls_update_records.jsonl +2 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip_id/upsert_always_skip_update_records.jsonl +5 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip_id/upsert_never_skip__id_add_values.json +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip_id/upsert_never_skip__id_values.json +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip_id/upsert_never_skip_add_records.jsonl +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip_id/upsert_never_skip_prefer_nulls__id_add_values.json +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip_id/upsert_never_skip_prefer_nulls__id_values.json +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip_id/upsert_never_skip_prefer_nulls_add_records.jsonl +4 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip_id/upsert_never_skip_prefer_nulls_update_records.jsonl +2 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip_id/upsert_never_skip_update_records.jsonl +5 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip_id/upsert_prefer_nulls__id_add_values.json +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip_id/upsert_prefer_nulls__id_values.json +1 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip_id/upsert_prefer_nulls_add_records.jsonl +3 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip_id/upsert_prefer_nulls_update_records.jsonl +2 -0
- data/src/test/resources/org/embulk/output/kintone/task/skip_id/upsert_update_records.jsonl +5 -0
- metadata +163 -17
- data/classpath/embulk-output-kintone-1.0.0.jar +0 -0
- /data/src/test/resources/org/embulk/output/kintone/task/mode/{values.json → upsert_never_skip_double_single_line_text_values.json} +0 -0
- /data/src/test/resources/org/embulk/output/kintone/task/mode/{upsert_add_ignore_nulls_records.jsonl → upsert_never_skip_ignore_nulls_add_records.jsonl} +0 -0
- /data/src/test/resources/org/embulk/output/kintone/task/mode/{values_ignore_nulls.json → upsert_never_skip_ignore_nulls_double_single_line_text_values.json} +0 -0
- /data/src/test/resources/org/embulk/output/kintone/task/mode/{values_prefer_nulls.json → upsert_never_skip_prefer_nulls_double_single_line_text_values.json} +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: abd297c9f29bedc191c3abc3837ff3955fdde7df
|
4
|
+
data.tar.gz: 5be528c62b5f1985b756f311699f74370b05a52b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 040f72edfe4cfe79b4bc0c303653efc6d1fb93b84db8d009df9bf845e6bd1e712d4c222412db5c22bf21a9b1315cf6029b30c359294c664972c0fe369ed50345
|
7
|
+
data.tar.gz: 808579e76d0a6d854583d0d834f487f9a102b7cb827030d5857f4f0268f310f5f854135790904b9551cca9b489c58311434b4117a53426581642c79acced3ff0
|
data/README.md
CHANGED
@@ -18,14 +18,32 @@ kintone output plugin for Embulk stores app records from kintone.
|
|
18
18
|
- **guest_space_id**: kintone app belongs to guest space, guest space id is required. (integer, optional)
|
19
19
|
- **mode**: kintone mode (string, required)
|
20
20
|
- **update_key**: Column name to set update key (string, required if mode is update or upsert)
|
21
|
+
- **reduce_key**: Key column name to reduce expanded SUBTABLE (string, optional)
|
22
|
+
- **sort_columns**: List of columns for sorting input records (array of objects, optional)
|
23
|
+
- **name**: Column name (string, required)
|
24
|
+
- **order**: Sort order (string `asc` or `desc`, required)
|
25
|
+
- **max_sort_tmp_files**: Maximum number of temporary files for sorting input records (integer, default is `1024`)
|
26
|
+
- **max_sort_memory**: Maximum memory usage for sorting input records (bytes in long, default is the estimated available memory, which is the approximate value of the JVM's current free memory)
|
21
27
|
- **prefer_nulls**: Whether to set fields to null instead of default value of type when column is null (boolean, default is `false`)
|
22
28
|
- **ignore_nulls**: Whether to completely ignore fields when column is null (boolean, default is `false`)
|
29
|
+
- **skip_if_non_existing_id_or_update_key**: The skip policy if the record corresponding to the id or update key does not exist (string `auto`, `never` or `always`, default is `auto`). No effect for insert mode.
|
30
|
+
- **auto**:
|
31
|
+
- **update mode**: Skip the record if no id or update key value is specified.
|
32
|
+
- **upsert mode**: Skip the record if corresponds to the id does not exist or no update key value is specified.
|
33
|
+
- **never**: Never skip the record even if corresponds to the id or update key does not exist.
|
34
|
+
- **update mode**: Throw exception if no id or update key value is specified.
|
35
|
+
- **upsert mode**: Insert the record if corresponds to the id or update key does not exist (also, if no id or update key value is specified).
|
36
|
+
- **always**: Always skip the record if corresponds to the id or update key does not exist (also, if no id or update key value is specified). update mode and upsert mode will the same behavior (only updated, never inserted).
|
23
37
|
- **column_options** advanced: a key-value pairs where key is a column name and value is options for the column.
|
24
38
|
- **field_code**: field code (string, required)
|
25
39
|
- **type**: field type (string, required). See [this page](https://cybozu.dev/ja/kintone/docs/overview/field-types/#field-type-update) for list of available types. However, following types are not yet supported
|
26
|
-
- `USER_SELECT`, `ORGANIZATION_SELECT`, `GROUP_SELECT`, `FILE
|
40
|
+
- `USER_SELECT`, `ORGANIZATION_SELECT`, `GROUP_SELECT`, `FILE`
|
27
41
|
- **timezone**: timezone to convert into `date` (string, default is `UTC`)
|
28
42
|
- **val_sep**: Used to specify multiple checkbox values (string, default is `,`)
|
43
|
+
- **sort_columns**: List of columns for sorting rows in SUBTABLE. Available only if type is `SUBTABLE` (array of objects, optional)
|
44
|
+
- **name**: Column name (string, required)
|
45
|
+
- **order**: Sort order (string `asc` or `desc`, required)
|
46
|
+
- **chunk_size**: Maximum number of records to request at once (integer, default is `100`)
|
29
47
|
|
30
48
|
## Example
|
31
49
|
|
@@ -46,6 +64,52 @@ out:
|
|
46
64
|
date_time: {field_code: "datetime", type: "DATETIME"}
|
47
65
|
```
|
48
66
|
|
67
|
+
### For reduce expanded SUBTABLE
|
68
|
+
|
69
|
+
```yaml
|
70
|
+
out:
|
71
|
+
...
|
72
|
+
reduce_key: id
|
73
|
+
column_options:
|
74
|
+
id: {field_code: "id", type: "NUMBER"}
|
75
|
+
...
|
76
|
+
table: {field_code: "table", type: "SUBTABLE", sort_columns: [{name: number, order: asc}, {name: text, order: desc}]}
|
77
|
+
table.number: {field_code: "number_in_table", type: "NUMBER"}
|
78
|
+
table.text: {field_code: "text_in_table", type: "SINGLE_LINE_TEXT"}
|
79
|
+
```
|
80
|
+
|
81
|
+
#### KINTONE
|
82
|
+
|
83
|
+
| Form | Field Code |
|
84
|
+
| ------------------------- | --------------- |
|
85
|
+
| Table's own | table |
|
86
|
+
| NUMBER In Table | number_in_table |
|
87
|
+
| SINGLE_LINE_TEXT In Table | text_in_table |
|
88
|
+
|
89
|
+
#### INPUT CSV
|
90
|
+
|
91
|
+
```csv
|
92
|
+
id,table.number,table.text
|
93
|
+
1,0,test0
|
94
|
+
1,1,test1
|
95
|
+
2,0,test0
|
96
|
+
```
|
97
|
+
|
98
|
+
#### RESULT
|
99
|
+
|
100
|
+
ID:1
|
101
|
+
|
102
|
+
| NUMBER | SINGLE_LINE_TEXT |
|
103
|
+
| ------------- | ---------------- |
|
104
|
+
| 0 | test0 |
|
105
|
+
| 1 | test1 |
|
106
|
+
|
107
|
+
ID:2
|
108
|
+
|
109
|
+
| NUMBER | SINGLE_LINE_TEXT |
|
110
|
+
| ------------- | ---------------- |
|
111
|
+
| 0 | test0 |
|
112
|
+
|
49
113
|
## Build
|
50
114
|
|
51
115
|
```
|
data/build.gradle
CHANGED
@@ -28,6 +28,7 @@ targetCompatibility = 1.8
|
|
28
28
|
|
29
29
|
dependencies {
|
30
30
|
compileOnly "org.embulk:embulk-core:0.9.23"
|
31
|
+
implementation "com.google.code.externalsortinginjava:externalsortinginjava:0.6.2"
|
31
32
|
implementation project(path: ":shadow-kintone-java-client", configuration: "shadow")
|
32
33
|
|
33
34
|
testImplementation "junit:junit:4.+"
|
Binary file
|
Binary file
|
Binary file
|
data/classpath/{shadow-kintone-java-client-1.0.0-all.jar → shadow-kintone-java-client-1.2.0-all.jar}
RENAMED
Binary file
|
@@ -0,0 +1,117 @@
|
|
1
|
+
package org.embulk.output.kintone;
|
2
|
+
|
3
|
+
import com.kintone.client.KintoneClientBuilder;
|
4
|
+
import com.kintone.client.RecordClient;
|
5
|
+
import com.kintone.client.model.app.field.FieldProperty;
|
6
|
+
import com.kintone.client.model.record.FieldType;
|
7
|
+
import java.io.IOException;
|
8
|
+
import java.util.Map;
|
9
|
+
import java.util.function.Supplier;
|
10
|
+
import org.embulk.config.ConfigException;
|
11
|
+
import org.embulk.output.kintone.record.Id;
|
12
|
+
import org.embulk.output.kintone.util.Lazy;
|
13
|
+
import org.embulk.spi.Column;
|
14
|
+
import org.embulk.spi.Schema;
|
15
|
+
import org.embulk.spi.type.Type;
|
16
|
+
import org.embulk.spi.type.Types;
|
17
|
+
|
18
|
+
public class KintoneClient implements AutoCloseable {
|
19
|
+
private final PluginTask task;
|
20
|
+
private final Schema schema;
|
21
|
+
private final com.kintone.client.KintoneClient client;
|
22
|
+
private final Map<String, FieldProperty> fields;
|
23
|
+
|
24
|
+
public static Lazy<KintoneClient> lazy(Supplier<PluginTask> task, Schema schema) {
|
25
|
+
return new Lazy<KintoneClient>() {
|
26
|
+
@Override
|
27
|
+
protected KintoneClient initialValue() {
|
28
|
+
return new KintoneClient(task.get(), schema);
|
29
|
+
}
|
30
|
+
};
|
31
|
+
}
|
32
|
+
|
33
|
+
private KintoneClient(PluginTask task, Schema schema) {
|
34
|
+
this.task = task;
|
35
|
+
this.schema = schema;
|
36
|
+
KintoneClientBuilder builder = KintoneClientBuilder.create("https://" + task.getDomain());
|
37
|
+
if (task.getGuestSpaceId().isPresent()) {
|
38
|
+
builder.setGuestSpaceId(task.getGuestSpaceId().get());
|
39
|
+
}
|
40
|
+
if (task.getBasicAuthUsername().isPresent() && task.getBasicAuthPassword().isPresent()) {
|
41
|
+
builder.withBasicAuth(task.getBasicAuthUsername().get(), task.getBasicAuthPassword().get());
|
42
|
+
}
|
43
|
+
if (task.getUsername().isPresent() && task.getPassword().isPresent()) {
|
44
|
+
builder.authByPassword(task.getUsername().get(), task.getPassword().get());
|
45
|
+
} else if (task.getToken().isPresent()) {
|
46
|
+
builder.authByApiToken(task.getToken().get());
|
47
|
+
} else {
|
48
|
+
throw new ConfigException("Username and password or token must be configured.");
|
49
|
+
}
|
50
|
+
client = builder.build();
|
51
|
+
fields = client.app().getFormFields(task.getAppId());
|
52
|
+
KintoneMode.of(task).validate(task, this);
|
53
|
+
}
|
54
|
+
|
55
|
+
public void validateIdOrUpdateKey(String columnName) {
|
56
|
+
Column column = getColumn(columnName);
|
57
|
+
if (column == null) {
|
58
|
+
throw new ConfigException("The column '" + columnName + "' for update does not exist.");
|
59
|
+
}
|
60
|
+
validateId(column);
|
61
|
+
validateUpdateKey(column);
|
62
|
+
}
|
63
|
+
|
64
|
+
public Column getColumn(String columnName) {
|
65
|
+
return schema.getColumns().stream()
|
66
|
+
.filter(column -> column.getName().equals(columnName))
|
67
|
+
.findFirst()
|
68
|
+
.orElse(null);
|
69
|
+
}
|
70
|
+
|
71
|
+
public FieldType getFieldType(String fieldCode) {
|
72
|
+
FieldProperty field = fields.get(fieldCode);
|
73
|
+
return field == null ? null : field.getType();
|
74
|
+
}
|
75
|
+
|
76
|
+
public RecordClient record() {
|
77
|
+
return client.record();
|
78
|
+
}
|
79
|
+
|
80
|
+
@Override
|
81
|
+
public void close() {
|
82
|
+
try {
|
83
|
+
client.close();
|
84
|
+
} catch (IOException e) {
|
85
|
+
throw new RuntimeException("kintone throw exception", e);
|
86
|
+
}
|
87
|
+
}
|
88
|
+
|
89
|
+
private void validateId(Column column) {
|
90
|
+
if (!column.getName().equals(Id.FIELD)) {
|
91
|
+
return;
|
92
|
+
}
|
93
|
+
Type type = column.getType();
|
94
|
+
if (!type.equals(Types.LONG)) {
|
95
|
+
throw new ConfigException("The id column must be 'long'.");
|
96
|
+
}
|
97
|
+
}
|
98
|
+
|
99
|
+
private void validateUpdateKey(Column column) {
|
100
|
+
if (column.getName().equals(Id.FIELD)) {
|
101
|
+
return;
|
102
|
+
}
|
103
|
+
String fieldCode = getFieldCode(column);
|
104
|
+
FieldType fieldType = getFieldType(fieldCode);
|
105
|
+
if (fieldType == null) {
|
106
|
+
throw new ConfigException("The field '" + fieldCode + "' for update does not exist.");
|
107
|
+
}
|
108
|
+
if (fieldType != FieldType.SINGLE_LINE_TEXT && fieldType != FieldType.NUMBER) {
|
109
|
+
throw new ConfigException("The update_key must be 'SINGLE_LINE_TEXT' or 'NUMBER'.");
|
110
|
+
}
|
111
|
+
}
|
112
|
+
|
113
|
+
private String getFieldCode(Column column) {
|
114
|
+
KintoneColumnOption option = task.getColumnOptions().get(column.getName());
|
115
|
+
return option != null ? option.getFieldCode() : column.getName();
|
116
|
+
}
|
117
|
+
}
|
@@ -1,5 +1,6 @@
|
|
1
1
|
package org.embulk.output.kintone;
|
2
2
|
|
3
|
+
import java.util.List;
|
3
4
|
import org.embulk.config.Config;
|
4
5
|
import org.embulk.config.ConfigDefault;
|
5
6
|
import org.embulk.config.Task;
|
@@ -18,4 +19,8 @@ public interface KintoneColumnOption extends Task {
|
|
18
19
|
@Config("val_sep")
|
19
20
|
@ConfigDefault("\",\"")
|
20
21
|
String getValueSeparator();
|
22
|
+
|
23
|
+
@Config("sort_columns")
|
24
|
+
@ConfigDefault("[]")
|
25
|
+
List<KintoneSortColumn> getSortColumns();
|
21
26
|
}
|
@@ -13,6 +13,7 @@ import com.kintone.client.model.record.MultiSelectFieldValue;
|
|
13
13
|
import com.kintone.client.model.record.NumberFieldValue;
|
14
14
|
import com.kintone.client.model.record.OrganizationSelectFieldValue;
|
15
15
|
import com.kintone.client.model.record.RadioButtonFieldValue;
|
16
|
+
import com.kintone.client.model.record.Record;
|
16
17
|
import com.kintone.client.model.record.RichTextFieldValue;
|
17
18
|
import com.kintone.client.model.record.SingleLineTextFieldValue;
|
18
19
|
import com.kintone.client.model.record.SubtableFieldValue;
|
@@ -29,8 +30,15 @@ import java.time.ZonedDateTime;
|
|
29
30
|
import java.util.Arrays;
|
30
31
|
import java.util.Collections;
|
31
32
|
import java.util.List;
|
33
|
+
import java.util.stream.Collectors;
|
34
|
+
import org.embulk.output.kintone.deserializer.Deserializer;
|
32
35
|
import org.embulk.spi.time.Timestamp;
|
36
|
+
import org.embulk.spi.type.Type;
|
37
|
+
import org.embulk.spi.type.Types;
|
38
|
+
import org.msgpack.value.ArrayValue;
|
39
|
+
import org.msgpack.value.StringValue;
|
33
40
|
import org.msgpack.value.Value;
|
41
|
+
import org.msgpack.value.ValueFactory;
|
34
42
|
|
35
43
|
public enum KintoneColumnType {
|
36
44
|
SINGLE_LINE_TEXT {
|
@@ -44,6 +52,11 @@ public enum KintoneColumnType {
|
|
44
52
|
return new SingleLineTextFieldValue(value);
|
45
53
|
}
|
46
54
|
|
55
|
+
@Override
|
56
|
+
public String getValue(Record record, String fieldCode) {
|
57
|
+
return record.getSingleLineTextFieldValue(fieldCode);
|
58
|
+
}
|
59
|
+
|
47
60
|
@Override
|
48
61
|
public void setUpdateKey(UpdateKey updateKey, String field) {
|
49
62
|
updateKey.setField(field);
|
@@ -53,6 +66,16 @@ public enum KintoneColumnType {
|
|
53
66
|
public void setUpdateKey(UpdateKey updateKey, String field, FieldValue value) {
|
54
67
|
updateKey.setField(field).setValue(((SingleLineTextFieldValue) value).getValue());
|
55
68
|
}
|
69
|
+
|
70
|
+
@Override
|
71
|
+
public StringValue asValue(FieldValue value) {
|
72
|
+
return ValueFactory.newString(((SingleLineTextFieldValue) value).getValue());
|
73
|
+
}
|
74
|
+
|
75
|
+
@Override
|
76
|
+
protected List<Type> getSupportedTypes() {
|
77
|
+
return Arrays.asList(Types.BOOLEAN, Types.LONG, Types.DOUBLE, Types.TIMESTAMP, Types.JSON);
|
78
|
+
}
|
56
79
|
},
|
57
80
|
MULTI_LINE_TEXT {
|
58
81
|
@Override
|
@@ -64,6 +87,16 @@ public enum KintoneColumnType {
|
|
64
87
|
public MultiLineTextFieldValue getFieldValue(String value, KintoneColumnOption option) {
|
65
88
|
return new MultiLineTextFieldValue(value);
|
66
89
|
}
|
90
|
+
|
91
|
+
@Override
|
92
|
+
public StringValue asValue(FieldValue value) {
|
93
|
+
return ValueFactory.newString(((MultiLineTextFieldValue) value).getValue());
|
94
|
+
}
|
95
|
+
|
96
|
+
@Override
|
97
|
+
protected List<Type> getSupportedTypes() {
|
98
|
+
return Arrays.asList(Types.BOOLEAN, Types.LONG, Types.DOUBLE, Types.TIMESTAMP, Types.JSON);
|
99
|
+
}
|
67
100
|
},
|
68
101
|
RICH_TEXT {
|
69
102
|
@Override
|
@@ -75,6 +108,16 @@ public enum KintoneColumnType {
|
|
75
108
|
public RichTextFieldValue getFieldValue(String value, KintoneColumnOption option) {
|
76
109
|
return new RichTextFieldValue(value);
|
77
110
|
}
|
111
|
+
|
112
|
+
@Override
|
113
|
+
public StringValue asValue(FieldValue value) {
|
114
|
+
return ValueFactory.newString(((RichTextFieldValue) value).getValue());
|
115
|
+
}
|
116
|
+
|
117
|
+
@Override
|
118
|
+
protected List<Type> getSupportedTypes() {
|
119
|
+
return Arrays.asList(Types.BOOLEAN, Types.LONG, Types.DOUBLE, Types.TIMESTAMP, Types.JSON);
|
120
|
+
}
|
78
121
|
},
|
79
122
|
NUMBER {
|
80
123
|
@Override
|
@@ -97,6 +140,11 @@ public enum KintoneColumnType {
|
|
97
140
|
return (NumberFieldValue) getFieldValue(value.getEpochSecond(), option);
|
98
141
|
}
|
99
142
|
|
143
|
+
@Override
|
144
|
+
public BigDecimal getValue(Record record, String fieldCode) {
|
145
|
+
return record.getNumberFieldValue(fieldCode);
|
146
|
+
}
|
147
|
+
|
100
148
|
@Override
|
101
149
|
public void setUpdateKey(UpdateKey updateKey, String field) {
|
102
150
|
updateKey.setField(field);
|
@@ -106,6 +154,16 @@ public enum KintoneColumnType {
|
|
106
154
|
public void setUpdateKey(UpdateKey updateKey, String field, FieldValue value) {
|
107
155
|
updateKey.setField(field).setValue(((NumberFieldValue) value).getValue());
|
108
156
|
}
|
157
|
+
|
158
|
+
@Override
|
159
|
+
public StringValue asValue(FieldValue value) {
|
160
|
+
return ValueFactory.newString(((NumberFieldValue) value).getValue().toPlainString());
|
161
|
+
}
|
162
|
+
|
163
|
+
@Override
|
164
|
+
protected List<Type> getSupportedTypes() {
|
165
|
+
return Arrays.asList(Types.BOOLEAN, Types.LONG, Types.DOUBLE, Types.TIMESTAMP);
|
166
|
+
}
|
109
167
|
},
|
110
168
|
CHECK_BOX {
|
111
169
|
@Override
|
@@ -117,6 +175,18 @@ public enum KintoneColumnType {
|
|
117
175
|
public CheckBoxFieldValue getFieldValue(String value, KintoneColumnOption option) {
|
118
176
|
return new CheckBoxFieldValue(asList(value, option));
|
119
177
|
}
|
178
|
+
|
179
|
+
@Override
|
180
|
+
public ArrayValue asValue(FieldValue value) {
|
181
|
+
return ValueFactory.newArray(
|
182
|
+
((CheckBoxFieldValue) value)
|
183
|
+
.getValues().stream().map(ValueFactory::newString).collect(Collectors.toList()));
|
184
|
+
}
|
185
|
+
|
186
|
+
@Override
|
187
|
+
protected List<Type> getSupportedTypes() {
|
188
|
+
return Collections.emptyList();
|
189
|
+
}
|
120
190
|
},
|
121
191
|
RADIO_BUTTON {
|
122
192
|
@Override
|
@@ -128,6 +198,16 @@ public enum KintoneColumnType {
|
|
128
198
|
public RadioButtonFieldValue getFieldValue(String value, KintoneColumnOption option) {
|
129
199
|
return new RadioButtonFieldValue(value);
|
130
200
|
}
|
201
|
+
|
202
|
+
@Override
|
203
|
+
public StringValue asValue(FieldValue value) {
|
204
|
+
return ValueFactory.newString(((RadioButtonFieldValue) value).getValue());
|
205
|
+
}
|
206
|
+
|
207
|
+
@Override
|
208
|
+
protected List<Type> getSupportedTypes() {
|
209
|
+
return Collections.emptyList();
|
210
|
+
}
|
131
211
|
},
|
132
212
|
MULTI_SELECT {
|
133
213
|
@Override
|
@@ -139,6 +219,18 @@ public enum KintoneColumnType {
|
|
139
219
|
public MultiSelectFieldValue getFieldValue(String value, KintoneColumnOption option) {
|
140
220
|
return new MultiSelectFieldValue(asList(value, option));
|
141
221
|
}
|
222
|
+
|
223
|
+
@Override
|
224
|
+
public ArrayValue asValue(FieldValue value) {
|
225
|
+
return ValueFactory.newArray(
|
226
|
+
((MultiSelectFieldValue) value)
|
227
|
+
.getValues().stream().map(ValueFactory::newString).collect(Collectors.toList()));
|
228
|
+
}
|
229
|
+
|
230
|
+
@Override
|
231
|
+
protected List<Type> getSupportedTypes() {
|
232
|
+
return Collections.emptyList();
|
233
|
+
}
|
142
234
|
},
|
143
235
|
DROP_DOWN {
|
144
236
|
@Override
|
@@ -150,6 +242,16 @@ public enum KintoneColumnType {
|
|
150
242
|
public DropDownFieldValue getFieldValue(String value, KintoneColumnOption option) {
|
151
243
|
return new DropDownFieldValue(value);
|
152
244
|
}
|
245
|
+
|
246
|
+
@Override
|
247
|
+
public StringValue asValue(FieldValue value) {
|
248
|
+
return ValueFactory.newString(((DropDownFieldValue) value).getValue());
|
249
|
+
}
|
250
|
+
|
251
|
+
@Override
|
252
|
+
protected List<Type> getSupportedTypes() {
|
253
|
+
return Collections.emptyList();
|
254
|
+
}
|
153
255
|
},
|
154
256
|
USER_SELECT {
|
155
257
|
@Override
|
@@ -161,6 +263,16 @@ public enum KintoneColumnType {
|
|
161
263
|
public UserSelectFieldValue getFieldValue(String value, KintoneColumnOption option) {
|
162
264
|
throw new UnsupportedOperationException();
|
163
265
|
}
|
266
|
+
|
267
|
+
@Override
|
268
|
+
public Value asValue(FieldValue value) {
|
269
|
+
throw new UnsupportedOperationException();
|
270
|
+
}
|
271
|
+
|
272
|
+
@Override
|
273
|
+
protected List<Type> getSupportedTypes() {
|
274
|
+
return Collections.emptyList();
|
275
|
+
}
|
164
276
|
},
|
165
277
|
ORGANIZATION_SELECT {
|
166
278
|
@Override
|
@@ -172,6 +284,16 @@ public enum KintoneColumnType {
|
|
172
284
|
public OrganizationSelectFieldValue getFieldValue(String value, KintoneColumnOption option) {
|
173
285
|
throw new UnsupportedOperationException();
|
174
286
|
}
|
287
|
+
|
288
|
+
@Override
|
289
|
+
public Value asValue(FieldValue value) {
|
290
|
+
throw new UnsupportedOperationException();
|
291
|
+
}
|
292
|
+
|
293
|
+
@Override
|
294
|
+
protected List<Type> getSupportedTypes() {
|
295
|
+
return Collections.emptyList();
|
296
|
+
}
|
175
297
|
},
|
176
298
|
GROUP_SELECT {
|
177
299
|
@Override
|
@@ -183,6 +305,16 @@ public enum KintoneColumnType {
|
|
183
305
|
public GroupSelectFieldValue getFieldValue(String value, KintoneColumnOption option) {
|
184
306
|
throw new UnsupportedOperationException();
|
185
307
|
}
|
308
|
+
|
309
|
+
@Override
|
310
|
+
public Value asValue(FieldValue value) {
|
311
|
+
throw new UnsupportedOperationException();
|
312
|
+
}
|
313
|
+
|
314
|
+
@Override
|
315
|
+
protected List<Type> getSupportedTypes() {
|
316
|
+
return Collections.emptyList();
|
317
|
+
}
|
186
318
|
},
|
187
319
|
DATE {
|
188
320
|
@Override
|
@@ -215,6 +347,16 @@ public enum KintoneColumnType {
|
|
215
347
|
public DateFieldValue getFieldValue(Timestamp value, KintoneColumnOption option) {
|
216
348
|
return new DateFieldValue(value.getInstant().atZone(getZoneId(option)).toLocalDate());
|
217
349
|
}
|
350
|
+
|
351
|
+
@Override
|
352
|
+
public StringValue asValue(FieldValue value) {
|
353
|
+
return ValueFactory.newString(((DateFieldValue) value).getValue().toString());
|
354
|
+
}
|
355
|
+
|
356
|
+
@Override
|
357
|
+
protected List<Type> getSupportedTypes() {
|
358
|
+
return Arrays.asList(Types.LONG, Types.DOUBLE, Types.TIMESTAMP);
|
359
|
+
}
|
218
360
|
},
|
219
361
|
TIME {
|
220
362
|
@Override
|
@@ -247,6 +389,16 @@ public enum KintoneColumnType {
|
|
247
389
|
public TimeFieldValue getFieldValue(Timestamp value, KintoneColumnOption option) {
|
248
390
|
return new TimeFieldValue(value.getInstant().atZone(getZoneId(option)).toLocalTime());
|
249
391
|
}
|
392
|
+
|
393
|
+
@Override
|
394
|
+
public StringValue asValue(FieldValue value) {
|
395
|
+
return ValueFactory.newString(((TimeFieldValue) value).getValue().toString());
|
396
|
+
}
|
397
|
+
|
398
|
+
@Override
|
399
|
+
protected List<Type> getSupportedTypes() {
|
400
|
+
return Arrays.asList(Types.LONG, Types.DOUBLE, Types.TIMESTAMP);
|
401
|
+
}
|
250
402
|
},
|
251
403
|
DATETIME {
|
252
404
|
@Override
|
@@ -275,6 +427,16 @@ public enum KintoneColumnType {
|
|
275
427
|
public DateTimeFieldValue getFieldValue(Timestamp value, KintoneColumnOption option) {
|
276
428
|
return new DateTimeFieldValue(value.getInstant().atZone(ZoneOffset.UTC));
|
277
429
|
}
|
430
|
+
|
431
|
+
@Override
|
432
|
+
public StringValue asValue(FieldValue value) {
|
433
|
+
return ValueFactory.newString(((DateTimeFieldValue) value).getValue().toString());
|
434
|
+
}
|
435
|
+
|
436
|
+
@Override
|
437
|
+
protected List<Type> getSupportedTypes() {
|
438
|
+
return Arrays.asList(Types.LONG, Types.DOUBLE, Types.TIMESTAMP);
|
439
|
+
}
|
278
440
|
},
|
279
441
|
LINK {
|
280
442
|
@Override
|
@@ -286,6 +448,16 @@ public enum KintoneColumnType {
|
|
286
448
|
public LinkFieldValue getFieldValue(String value, KintoneColumnOption option) {
|
287
449
|
return new LinkFieldValue(value);
|
288
450
|
}
|
451
|
+
|
452
|
+
@Override
|
453
|
+
public StringValue asValue(FieldValue value) {
|
454
|
+
return ValueFactory.newString(((LinkFieldValue) value).getValue());
|
455
|
+
}
|
456
|
+
|
457
|
+
@Override
|
458
|
+
protected List<Type> getSupportedTypes() {
|
459
|
+
return Collections.emptyList();
|
460
|
+
}
|
289
461
|
},
|
290
462
|
FILE {
|
291
463
|
@Override
|
@@ -297,6 +469,16 @@ public enum KintoneColumnType {
|
|
297
469
|
public FileFieldValue getFieldValue(String value, KintoneColumnOption option) {
|
298
470
|
throw new UnsupportedOperationException();
|
299
471
|
}
|
472
|
+
|
473
|
+
@Override
|
474
|
+
public Value asValue(FieldValue value) {
|
475
|
+
throw new UnsupportedOperationException();
|
476
|
+
}
|
477
|
+
|
478
|
+
@Override
|
479
|
+
protected List<Type> getSupportedTypes() {
|
480
|
+
return Collections.emptyList();
|
481
|
+
}
|
300
482
|
},
|
301
483
|
SUBTABLE {
|
302
484
|
@Override
|
@@ -306,9 +488,20 @@ public enum KintoneColumnType {
|
|
306
488
|
|
307
489
|
@Override
|
308
490
|
public SubtableFieldValue getFieldValue(String value, KintoneColumnOption option) {
|
491
|
+
return DESERIALIZER.deserialize(value.isEmpty() ? "[]" : value, SubtableFieldValue.class);
|
492
|
+
}
|
493
|
+
|
494
|
+
@Override
|
495
|
+
public Value asValue(FieldValue value) {
|
309
496
|
throw new UnsupportedOperationException();
|
310
497
|
}
|
498
|
+
|
499
|
+
@Override
|
500
|
+
protected List<Type> getSupportedTypes() {
|
501
|
+
return Collections.singletonList(Types.JSON);
|
502
|
+
}
|
311
503
|
};
|
504
|
+
private static final Deserializer DESERIALIZER = new Deserializer();
|
312
505
|
private static final Timestamp EPOCH = Timestamp.ofInstant(Instant.EPOCH);
|
313
506
|
|
314
507
|
public static KintoneColumnType getType(
|
@@ -319,25 +512,49 @@ public enum KintoneColumnType {
|
|
319
512
|
public abstract FieldValue getFieldValue();
|
320
513
|
|
321
514
|
public FieldValue getFieldValue(boolean value, KintoneColumnOption option) {
|
322
|
-
|
515
|
+
if (getSupportedTypes().contains(Types.BOOLEAN)) {
|
516
|
+
return getFieldValue(String.valueOf(value), option);
|
517
|
+
} else {
|
518
|
+
throw new UnsupportedOperationException();
|
519
|
+
}
|
323
520
|
}
|
324
521
|
|
325
522
|
public FieldValue getFieldValue(long value, KintoneColumnOption option) {
|
326
|
-
|
523
|
+
if (getSupportedTypes().contains(Types.LONG)) {
|
524
|
+
return getFieldValue(String.valueOf(value), option);
|
525
|
+
} else {
|
526
|
+
throw new UnsupportedOperationException();
|
527
|
+
}
|
327
528
|
}
|
328
529
|
|
329
530
|
public FieldValue getFieldValue(double value, KintoneColumnOption option) {
|
330
|
-
|
531
|
+
if (getSupportedTypes().contains(Types.DOUBLE)) {
|
532
|
+
return getFieldValue(String.valueOf(value), option);
|
533
|
+
} else {
|
534
|
+
throw new UnsupportedOperationException();
|
535
|
+
}
|
331
536
|
}
|
332
537
|
|
333
538
|
public abstract FieldValue getFieldValue(String value, KintoneColumnOption option);
|
334
539
|
|
335
540
|
public FieldValue getFieldValue(Timestamp value, KintoneColumnOption option) {
|
336
|
-
|
541
|
+
if (getSupportedTypes().contains(Types.TIMESTAMP)) {
|
542
|
+
return getFieldValue(value.getInstant().toString(), option);
|
543
|
+
} else {
|
544
|
+
throw new UnsupportedOperationException();
|
545
|
+
}
|
337
546
|
}
|
338
547
|
|
339
548
|
public FieldValue getFieldValue(Value value, KintoneColumnOption option) {
|
340
|
-
|
549
|
+
if (getSupportedTypes().contains(Types.JSON)) {
|
550
|
+
return getFieldValue(value.toJson(), option);
|
551
|
+
} else {
|
552
|
+
throw new UnsupportedOperationException();
|
553
|
+
}
|
554
|
+
}
|
555
|
+
|
556
|
+
public Object getValue(Record Record, String fieldCode) {
|
557
|
+
throw new UnsupportedOperationException();
|
341
558
|
}
|
342
559
|
|
343
560
|
public void setUpdateKey(UpdateKey updateKey, String field) {
|
@@ -348,6 +565,10 @@ public enum KintoneColumnType {
|
|
348
565
|
throw new UnsupportedOperationException();
|
349
566
|
}
|
350
567
|
|
568
|
+
public abstract Value asValue(FieldValue value);
|
569
|
+
|
570
|
+
protected abstract List<Type> getSupportedTypes();
|
571
|
+
|
351
572
|
private static List<String> asList(String value, KintoneColumnOption option) {
|
352
573
|
return value.isEmpty()
|
353
574
|
? Collections.emptyList()
|