1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.infra.merge.result.impl.local;
19
20 import com.google.common.base.Preconditions;
21 import org.apache.shardingsphere.infra.util.json.JsonUtils;
22
23 import java.time.LocalDateTime;
24 import java.util.LinkedHashMap;
25 import java.util.List;
26 import java.util.Map;
27 import java.util.Optional;
28 import java.util.Properties;
29 import java.util.stream.Collectors;
30 import java.util.stream.Stream;
31
32
33
34
35 public final class LocalDataQueryResultRow {
36
37 private final List<Object> data;
38
39 public LocalDataQueryResultRow(final Object... data) {
40 this.data = Stream.of(data).map(this::convert).collect(Collectors.toList());
41 }
42
43 private Object convert(final Object data) {
44 if (null == data) {
45 return "";
46 }
47 if (data instanceof Optional) {
48 return ((Optional<?>) data).isPresent() ? convert(((Optional<?>) data).get()) : "";
49 }
50 if (data instanceof String) {
51 return data;
52 }
53 if (data instanceof Boolean || data instanceof Integer || data instanceof Long || data instanceof LocalDateTime) {
54 return data.toString();
55 }
56 if (data instanceof Enum) {
57 return ((Enum<?>) data).name();
58 }
59 if (data instanceof Properties) {
60 return ((Properties) data).isEmpty() ? "" : JsonUtils.toJsonString(convert((Properties) data));
61 }
62 if (data instanceof Map) {
63 return ((Map<?, ?>) data).isEmpty() ? "" : JsonUtils.toJsonString(data);
64 }
65 return JsonUtils.toJsonString(data);
66 }
67
68 private Map<Object, Object> convert(final Properties props) {
69 return props.keySet().stream().map(Object::toString).sorted().collect(Collectors.toMap(each -> each, props::get, (oldValue, currentValue) -> oldValue, LinkedHashMap::new));
70 }
71
72
73
74
75
76
77
78 public Object getCell(final int columnIndex) {
79 Preconditions.checkArgument(columnIndex > 0 && columnIndex < data.size() + 1);
80 return data.get(columnIndex - 1);
81 }
82 }