1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.linecorp.centraldogma.server.storage.repository;
18
19 import java.util.Map;
20
21 import javax.annotation.Nullable;
22
23 import com.linecorp.centraldogma.internal.Util;
24
25
26
27
28
29
30 public class FindOption<T> {
31
32
33
34
35 public static final FindOption<Boolean> FETCH_CONTENT = new FindOption<>("FETCH_CONTENT", true);
36
37
38
39
40 public static final FindOption<Integer> MAX_ENTRIES =
41 new FindOption<Integer>("MAX_ENTRIES", Integer.MAX_VALUE) {
42 @Override
43 boolean isValid(Integer value) {
44 return value > 0;
45 }
46 };
47
48 private final String name;
49 private final T defaultValue;
50 private final String fullName;
51
52 FindOption(String name, T defaultValue) {
53 this.name = name;
54 this.defaultValue = defaultValue;
55 fullName = Util.simpleTypeName(FindOption.class) + '.' + name;
56 }
57
58
59
60
61 public String name() {
62 return name;
63 }
64
65
66
67
68 public T defaultValue() {
69 return defaultValue;
70 }
71
72
73
74
75 boolean isValid(T value) {
76 return true;
77 }
78
79
80
81
82
83 public T get(@Nullable Map<FindOption<?>, ?> options) {
84 if (options == null) {
85 return defaultValue();
86 }
87
88 @SuppressWarnings("unchecked")
89 final T value = (T) options.get(this);
90 if (value == null) {
91 return defaultValue();
92 }
93
94 return value;
95 }
96
97 @Override
98 public String toString() {
99 return name();
100 }
101 }