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
24
25
26
27
28 public class FindOption<T> {
29
30
31
32
33 public static final FindOption<Boolean> FETCH_CONTENT = new FindOption<>("FETCH_CONTENT", true);
34
35
36
37
38 public static final FindOption<Integer> MAX_ENTRIES =
39 new FindOption<Integer>("MAX_ENTRIES", Integer.MAX_VALUE) {
40 @Override
41 boolean isValid(Integer value) {
42 return value > 0;
43 }
44 };
45
46 private final String name;
47 private final T defaultValue;
48
49 FindOption(String name, T defaultValue) {
50 this.name = name;
51 this.defaultValue = defaultValue;
52 }
53
54
55
56
57 public String name() {
58 return name;
59 }
60
61
62
63
64 public T defaultValue() {
65 return defaultValue;
66 }
67
68
69
70
71 boolean isValid(T value) {
72 return true;
73 }
74
75
76
77
78
79 public T get(@Nullable Map<FindOption<?>, ?> options) {
80 if (options == null) {
81 return defaultValue();
82 }
83
84 @SuppressWarnings("unchecked")
85 final T value = (T) options.get(this);
86 if (value == null) {
87 return defaultValue();
88 }
89
90 return value;
91 }
92
93 @Override
94 public String toString() {
95 return name();
96 }
97 }