Skip to content

Commit 653bb9c

Browse files
Revert "Revert "transfer USER_SELECT / CREATOR / MODIFIER / GROUP_SELECT / ORGANIZATION_SELECT / STATUS_ASSIGNEE as JSON"" (#48)
1 parent 9758502 commit 653bb9c

File tree

3 files changed

+39
-40
lines changed

3 files changed

+39
-40
lines changed

src/main/java/org/embulk/input/kintone/KintoneAccessor.java

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,6 @@
88
import com.google.gson.JsonSerializationContext;
99
import com.google.gson.JsonSerializer;
1010
import com.kintone.client.model.FileBody;
11-
import com.kintone.client.model.Group;
12-
import com.kintone.client.model.Organization;
13-
import com.kintone.client.model.User;
1411
import com.kintone.client.model.record.CalcFieldValue;
1512
import com.kintone.client.model.record.CheckBoxFieldValue;
1613
import com.kintone.client.model.record.DateFieldValue;
@@ -71,11 +68,11 @@ private String getAsString(final String fieldCode)
7168
case __REVISION__:
7269
return toString(record.getRevision(), Objects::toString);
7370
case CREATOR:
74-
return toString(record.getCreatorFieldValue(), User::getCode);
71+
return gson.toJson(record.getCreatorFieldValue());
7572
case CREATED_TIME:
7673
return toString(record.getCreatedTimeFieldValue(), (value) -> value.toInstant().toString());
7774
case MODIFIER:
78-
return toString(record.getModifierFieldValue(), User::getCode);
75+
return gson.toJson(record.getModifierFieldValue());
7976
case UPDATED_TIME:
8077
return toString(record.getUpdatedTimeFieldValue(), (value) -> value.toInstant().toString());
8178
case SINGLE_LINE_TEXT:
@@ -97,11 +94,11 @@ private String getAsString(final String fieldCode)
9794
case DROP_DOWN:
9895
return record.getDropDownFieldValue(fieldCode);
9996
case USER_SELECT:
100-
return toString(record.getUserSelectFieldValue(fieldCode), User::getCode);
97+
return gson.toJson(record.getUserSelectFieldValue(fieldCode));
10198
case ORGANIZATION_SELECT:
102-
return toString(record.getOrganizationSelectFieldValue(fieldCode), Organization::getCode);
99+
return gson.toJson(record.getOrganizationSelectFieldValue(fieldCode));
103100
case GROUP_SELECT:
104-
return toString(record.getGroupSelectFieldValue(fieldCode), Group::getCode);
101+
return gson.toJson(record.getGroupSelectFieldValue(fieldCode));
105102
case DATE:
106103
return toString(record.getDateFieldValue(fieldCode), LocalDate::toString);
107104
case TIME:
@@ -119,7 +116,7 @@ private String getAsString(final String fieldCode)
119116
case STATUS:
120117
return record.getStatusFieldValue();
121118
case STATUS_ASSIGNEE:
122-
return toString(record.getStatusAssigneeFieldValue(), User::getCode);
119+
return gson.toJson(record.getStatusAssigneeFieldValue());
123120
// 以下は値を取得できないもの
124121
case REFERENCE_TABLE:
125122
case LABEL:

src/main/java/org/embulk/input/kintone/KintoneInputPlugin.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -208,27 +208,27 @@ private Type buildType(final FieldType fieldType)
208208
case DATETIME:
209209
case UPDATED_TIME:
210210
return Types.TIMESTAMP;
211+
case CREATOR:
212+
case GROUP_SELECT:
213+
case MODIFIER:
214+
case ORGANIZATION_SELECT:
215+
case STATUS_ASSIGNEE:
211216
case SUBTABLE:
217+
case USER_SELECT:
212218
return Types.JSON;
213219
case CATEGORY:
214220
case CHECK_BOX:
215-
case CREATOR:
216221
case DATE:
217222
case DROP_DOWN:
218223
case FILE:
219-
case GROUP_SELECT:
220224
case LINK:
221-
case MODIFIER:
222225
case MULTI_LINE_TEXT:
223226
case MULTI_SELECT:
224-
case ORGANIZATION_SELECT:
225227
case RADIO_BUTTON:
226228
case RICH_TEXT:
227229
case SINGLE_LINE_TEXT:
228230
case STATUS:
229-
case STATUS_ASSIGNEE:
230231
case TIME:
231-
case USER_SELECT:
232232
return Types.STRING;
233233
default:
234234
return null;

src/test/java/org/embulk/input/kintone/TestKintoneAccessor.java

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -129,11 +129,13 @@ public void testAccess()
129129
Record testRecord = createTestRecord();
130130
KintoneAccessor accessor = new KintoneAccessor(testRecord);
131131
String multiValue = "sample1\nsample2";
132-
String userSelect = "code1\ncode2";
133-
String groupSelect = "code3\ncode4";
134-
String orgSelect = "code5\ncode6";
135-
String assigneeSelect = "code7\ncode8";
132+
String userSelectValue = "[{\"name\":\"name1\",\"code\":\"code1\"},{\"name\":\"name2\",\"code\":\"code2\"}]";
133+
String groupSelect = "[{\"name\":\"name3\",\"code\":\"code3\"},{\"name\":\"name4\",\"code\":\"code4\"}]";
134+
String orgSelect = "[{\"name\":\"name5\",\"code\":\"code5\"},{\"name\":\"name5\",\"code\":\"code6\"}]";
135+
String assigneeSelect = "[{\"name\":\"name7\",\"code\":\"code7\"},{\"name\":\"name8\",\"code\":\"code8\"}]";
136136
String subTableValue = "[{\"id\":1,\"value\":{\"sample field1\":{\"type\":\"SINGLE_LINE_TEXT\",\"value\":\"sample_text1\"}}}]";
137+
String creatorValue = "{\"name\":\"name9\",\"code\":\"code9\"}";
138+
String modifierValue = "{\"name\":\"name10\",\"code\":\"code10\"}";
137139
assertEquals(testRecord.getSingleLineTextFieldValue("文字列__1行"), accessor.get("文字列__1行"));
138140
assertEquals("1", accessor.get("数値"));
139141
assertEquals(testRecord.getMultiLineTextFieldValue("文字列__複数行"), accessor.get("文字列__複数行"));
@@ -146,17 +148,17 @@ public void testAccess()
146148
assertEquals("2018-01-01", accessor.get("日付"));
147149
assertEquals("12:34", accessor.get("時刻"));
148150
assertEquals("2018-01-02T02:30:00Z", accessor.get("日時"));
149-
assertEquals(userSelect, accessor.get("ユーザー選択"));
151+
assertEquals(userSelectValue, accessor.get("ユーザー選択"));
150152
assertEquals(groupSelect, accessor.get("グループ選択"));
151153
assertEquals(orgSelect, accessor.get("組織選択"));
152154
assertEquals(assigneeSelect, accessor.get("作業者"));
153155
assertEquals(subTableValue, accessor.get("サブテーブル"));
154156
assertEquals("sample_record_number", accessor.get("レコード番号"));
155157
assertEquals("123", accessor.get("$id"));
156158
assertEquals("456", accessor.get("$revision"));
157-
assertEquals("code9", accessor.get("作成者"));
159+
assertEquals(creatorValue, accessor.get("作成者"));
158160
assertEquals("2012-01-11T11:30:00Z", accessor.get("作成日時"));
159-
assertEquals("code10", accessor.get("更新者"));
161+
assertEquals(modifierValue, accessor.get("更新者"));
160162
assertEquals("2012-01-11T11:30:00Z", accessor.get("更新日時"));
161163
assertEquals("1.23E-12", accessor.get("計算(Calc)"));
162164
assertEquals("1234", accessor.get("数値(Calc)"));
@@ -176,9 +178,9 @@ public void testFields()
176178
assertEquals("APPCODE-1", accessor.get("レコード番号"));
177179
assertEquals("1", accessor.get("$id"));
178180
assertEquals("5", accessor.get("$revision"));
179-
assertEquals("sato", accessor.get("作成者"));
181+
assertEquals("{\"name\":\"Noboru Sato\",\"code\":\"sato\"}", accessor.get("作成者"));
180182
assertEquals("2021-01-11T11:11:11Z", accessor.get("作成日時"));
181-
assertEquals("guest/kato@cybozu.com", accessor.get("更新者"));
183+
assertEquals("{\"name\":\"Misaki Kato\",\"code\":\"guest/kato@cybozu.com\"}", accessor.get("更新者"));
182184
assertEquals("2022-02-22T22:22:22Z", accessor.get("更新日時"));
183185
assertEquals("テストです。", accessor.get("文字列(1行)"));
184186
assertEquals("テスト\nです。", accessor.get("文字列(複数行)"));
@@ -189,9 +191,9 @@ public void testFields()
189191
assertEquals("選択肢3", accessor.get("ラジオボタン"));
190192
assertEquals("選択肢4\n選択肢5", accessor.get("複数選択"));
191193
assertEquals("選択肢6", accessor.get("ドロップダウン"));
192-
assertEquals("guest/sato@cybozu.com\nkato", accessor.get("ユーザー選択"));
193-
assertEquals("kaihatsu\njinji", accessor.get("組織選択"));
194-
assertEquals("project_manager\nteam_leader", accessor.get("グループ選択"));
194+
assertEquals("[{\"name\":\"Noboru Sato\",\"code\":\"guest/sato@cybozu.com\"},{\"name\":\"Misaki Kato\",\"code\":\"kato\"}]", accessor.get("ユーザー選択"));
195+
assertEquals("[{\"name\":\"開発部\",\"code\":\"kaihatsu\"},{\"name\":\"人事部\",\"code\":\"jinji\"}]", accessor.get("組織選択"));
196+
assertEquals("[{\"name\":\"プロジェクトマネージャー\",\"code\":\"project_manager\"},{\"name\":\"チームリーダー\",\"code\":\"team_leader\"}]", accessor.get("グループ選択"));
195197
assertEquals("2012-01-11", accessor.get("日付"));
196198
assertEquals("11:30", accessor.get("時刻"));
197199
assertEquals("2012-01-11T11:30:00Z", accessor.get("日時"));
@@ -200,7 +202,7 @@ public void testFields()
200202
assertEquals("[{\"id\":48290,\"value\":{\"リッチエディター\":{\"type\":\"RICH_TEXT\",\"value\":\"\\u003ca href\\u003d\\\"https://www.cybozu.com\\\"\\u003eサイボウズ\\u003c/a\\u003e\"},\"グループ選択\":{\"type\":\"GROUP_SELECT\",\"value\":[{\"name\":\"プロジェクトマネージャー\",\"code\":\"project_manager\"},{\"name\":\"チームリーダー\",\"code\":\"team_leader\"}]},\"文字列(1行)\":{\"type\":\"SINGLE_LINE_TEXT\",\"value\":\"テストです。\"},\"ラジオボタン\":{\"type\":\"RADIO_BUTTON\",\"value\":\"選択肢3\"},\"ドロップダウン\":{\"type\":\"DROP_DOWN\",\"value\":\"選択肢6\"},\"組織選択\":{\"type\":\"ORGANIZATION_SELECT\",\"value\":[{\"name\":\"開発部\",\"code\":\"kaihatsu\"},{\"name\":\"人事部\",\"code\":\"jinji\"}]},\"ユーザー選択\":{\"type\":\"USER_SELECT\",\"value\":[{\"name\":\"Noboru Sato\",\"code\":\"guest/sato@cybozu.com\"},{\"name\":\"Misaki Kato\",\"code\":\"kato\"}]},\"日時\":{\"type\":\"DATETIME\",\"value\":\"2012-01-11T11:30:00Z\"},\"文字列(複数行)\":{\"type\":\"MULTI_LINE_TEXT\",\"value\":\"テスト\\nです。\"},\"時刻\":{\"type\":\"TIME\",\"value\":\"11:30\"},\"チェックボックス\":{\"type\":\"CHECK_BOX\",\"value\":[\"選択肢1\",\"選択肢2\"]},\"複数選択\":{\"type\":\"MULTI_SELECT\",\"value\":[\"選択肢4\",\"選択肢5\"]},\"数値\":{\"type\":\"NUMBER\",\"value\":\"123\"},\"添付ファイル\":{\"type\":\"FILE\",\"value\":[{\"contentType\":\"text/plain\",\"fileKey\":\"201202061155587E339F9067544F1A92C743460E3D12B3297\",\"name\":\"17to20_VerupLog (1).txt\",\"size\":\"23175\"},{\"contentType\":\"application/json\",\"fileKey\":\"201202061155583C763E30196F419E83E91D2E4A03746C273\",\"name\":\"17to20_VerupLog.txt\",\"size\":\"23176\"}]},\"リンク\":{\"type\":\"LINK\",\"value\":\"https://cybozu.co.jp/\"},\"計算\":{\"type\":\"CALC\",\"value\":\"456\"},\"日付\":{\"type\":\"DATE\",\"value\":\"2012-01-11\"}}},{\"id\":48291,\"value\":{\"リッチエディター\":{\"type\":\"RICH_TEXT\",\"value\":\"\\u003ca href\\u003d\\\"https://www.cybozu.com\\\"\\u003eサイボウズ\\u003c/a\\u003e\"},\"グループ選択\":{\"type\":\"GROUP_SELECT\",\"value\":[{\"name\":\"プロジェクトマネージャー\",\"code\":\"project_manager\"},{\"name\":\"チームリーダー\",\"code\":\"team_leader\"}]},\"文字列(1行)\":{\"type\":\"SINGLE_LINE_TEXT\",\"value\":\"テストです。\"},\"ラジオボタン\":{\"type\":\"RADIO_BUTTON\",\"value\":\"選択肢3\"},\"ドロップダウン\":{\"type\":\"DROP_DOWN\",\"value\":\"選択肢6\"},\"組織選択\":{\"type\":\"ORGANIZATION_SELECT\",\"value\":[{\"name\":\"開発部\",\"code\":\"kaihatsu\"},{\"name\":\"人事部\",\"code\":\"jinji\"}]},\"ユーザー選択\":{\"type\":\"USER_SELECT\",\"value\":[{\"name\":\"Noboru Sato\",\"code\":\"guest/sato@cybozu.com\"},{\"name\":\"Misaki Kato\",\"code\":\"kato\"}]},\"日時\":{\"type\":\"DATETIME\",\"value\":\"2012-01-11T11:30:00Z\"},\"文字列(複数行)\":{\"type\":\"MULTI_LINE_TEXT\",\"value\":\"テスト\\nです。\"},\"時刻\":{\"type\":\"TIME\",\"value\":\"11:30\"},\"チェックボックス\":{\"type\":\"CHECK_BOX\",\"value\":[\"選択肢1\",\"選択肢2\"]},\"複数選択\":{\"type\":\"MULTI_SELECT\",\"value\":[\"選択肢4\",\"選択肢5\"]},\"数値\":{\"type\":\"NUMBER\",\"value\":\"123\"},\"添付ファイル\":{\"type\":\"FILE\",\"value\":[{\"contentType\":\"text/plain\",\"fileKey\":\"201202061155587E339F9067544F1A92C743460E3D12B3297\",\"name\":\"17to20_VerupLog (1).txt\",\"size\":\"23175\"},{\"contentType\":\"application/json\",\"fileKey\":\"201202061155583C763E30196F419E83E91D2E4A03746C273\",\"name\":\"17to20_VerupLog.txt\",\"size\":\"23176\"}]},\"リンク\":{\"type\":\"LINK\",\"value\":\"https://cybozu.co.jp/\"},\"計算\":{\"type\":\"CALC\",\"value\":\"456\"},\"日付\":{\"type\":\"DATE\",\"value\":\"2012-01-11\"}}}]", accessor.get("テーブル"));
201203
assertEquals("category1\ncategory2", accessor.get("カテゴリー"));
202204
assertEquals("未処理", accessor.get("ステータス"));
203-
assertEquals("sato\nkato", accessor.get("作業者"));
205+
assertEquals("[{\"name\":\"Noboru Sato\",\"code\":\"sato\"},{\"name\":\"Misaki Kato\",\"code\":\"kato\"}]", accessor.get("作業者"));
204206
}
205207

206208
private Record record()
@@ -266,10 +268,10 @@ public void testNullFields()
266268
assertNull(accessor.get("$id"));
267269
assertNull(accessor.get("$revision"));
268270
assertNull(accessor.get("作成者"));
269-
assertNull(accessor.get("作成者(null項目)"));
271+
assertEquals("{}", accessor.get("作成者(null項目)"));
270272
assertNull(accessor.get("作成日時"));
271273
assertNull(accessor.get("更新者"));
272-
assertNull(accessor.get("更新者(null項目)"));
274+
assertEquals("{}", accessor.get("更新者(null項目)"));
273275
assertNull(accessor.get("更新日時"));
274276
assertNull(accessor.get("文字列(1行)"));
275277
assertNull(accessor.get("文字列(複数行)"));
@@ -282,15 +284,15 @@ public void testNullFields()
282284
assertEquals("", accessor.get("複数選択(空)"));
283285
assertEquals("", accessor.get("複数選択(null要素)"));
284286
assertNull(accessor.get("ドロップダウン"));
285-
assertEquals("", accessor.get("ユーザー選択(空)"));
286-
assertEquals("", accessor.get("ユーザー選択(null要素)"));
287-
assertEquals("", accessor.get("ユーザー選択(null項目)"));
288-
assertEquals("", accessor.get("組織選択(空)"));
289-
assertEquals("", accessor.get("組織選択(null要素)"));
290-
assertEquals("", accessor.get("組織選択(null項目)"));
291-
assertEquals("", accessor.get("グループ選択(空)"));
292-
assertEquals("", accessor.get("グループ選択(null要素)"));
293-
assertEquals("", accessor.get("グループ選択(null項目)"));
287+
assertEquals("[]", accessor.get("ユーザー選択(空)"));
288+
assertEquals("[null,null]", accessor.get("ユーザー選択(null要素)"));
289+
assertEquals("[{},{}]", accessor.get("ユーザー選択(null項目)"));
290+
assertEquals("[]", accessor.get("組織選択(空)"));
291+
assertEquals("[null,null]", accessor.get("組織選択(null要素)"));
292+
assertEquals("[{},{}]", accessor.get("組織選択(null項目)"));
293+
assertEquals("[]", accessor.get("グループ選択(空)"));
294+
assertEquals("[null,null]", accessor.get("グループ選択(null要素)"));
295+
assertEquals("[{},{}]", accessor.get("グループ選択(null項目)"));
294296
assertNull(accessor.get("日付"));
295297
assertNull(accessor.get("時刻"));
296298
assertNull(accessor.get("日時"));
@@ -306,7 +308,7 @@ public void testNullFields()
306308
assertEquals("", accessor.get("カテゴリー(null要素)"));
307309
*/
308310
assertNull(accessor.get("ステータス"));
309-
assertEquals("", accessor.get("作業者(空)"));
311+
assertEquals("[]", accessor.get("作業者(空)"));
310312
/* ビルトインフィールドは 1 つしか追加できない
311313
assertEquals("", accessor.get("作業者(null要素)"));
312314
assertEquals("", accessor.get("作業者(null項目)"));

0 commit comments

Comments
 (0)