1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.linecorp.centraldogma.internal.thrift;
18
19 import static com.google.common.collect.ImmutableList.toImmutableList;
20
21 import java.util.List;
22
23 import com.google.common.base.Converter;
24 import com.google.common.collect.ImmutableList;
25
26
27
28
29
30 public final class MergeQueryConverter
31 extends Converter<com.linecorp.centraldogma.common.MergeQuery<?>, MergeQuery> {
32
33 public static final Converter<com.linecorp.centraldogma.common.MergeQuery<?>, MergeQuery>
34 TO_DATA = new MergeQueryConverter();
35
36 public static final Converter<MergeQuery, com.linecorp.centraldogma.common.MergeQuery<?>>
37 TO_MODEL = TO_DATA.reverse();
38
39 @Override
40 protected MergeQuery doForward(com.linecorp.centraldogma.common.MergeQuery<?> mergeQuery) {
41 switch (mergeQuery.type()) {
42 case IDENTITY:
43 return new MergeQuery(QueryType.IDENTITY, convertMergeSources(mergeQuery), ImmutableList.of());
44 case JSON_PATH:
45 return new MergeQuery(QueryType.JSON_PATH, convertMergeSources(mergeQuery),
46 mergeQuery.expressions());
47 }
48 throw new Error();
49 }
50
51 @Override
52 protected com.linecorp.centraldogma.common.MergeQuery<?> doBackward(MergeQuery mergeQuery) {
53 switch (mergeQuery.type) {
54 case IDENTITY:
55 return com.linecorp.centraldogma.common.MergeQuery.ofJson(convertMergeSources(mergeQuery));
56 case JSON_PATH:
57 return com.linecorp.centraldogma.common.MergeQuery.ofJsonPath(convertMergeSources(mergeQuery),
58 mergeQuery.expressions);
59 }
60 throw new Error();
61 }
62
63 private static ImmutableList<MergeSource> convertMergeSources(
64 com.linecorp.centraldogma.common.MergeQuery<?> mergeQuery) {
65 return mergeQuery.mergeSources().stream()
66 .map(mergeSource -> new MergeSource(
67 mergeSource.path(), mergeSource.isOptional()))
68 .collect(toImmutableList());
69 }
70
71 private static List<com.linecorp.centraldogma.common.MergeSource> convertMergeSources(
72 MergeQuery mergeQuery) {
73 return mergeQuery.mergeSources
74 .stream()
75 .map(mergeSource -> {
76 if (mergeSource.isIsOptional()) {
77 return com.linecorp.centraldogma.common.MergeSource.ofOptional(mergeSource.getPath());
78 }
79 return com.linecorp.centraldogma.common.MergeSource.ofRequired(mergeSource.getPath());
80 })
81 .collect(toImmutableList());
82 }
83
84 private MergeQueryConverter() {}
85 }