Skip to content

Commit 2d27665

Browse files
committed
[fixup] Add withProfile, ProgrammaticBuilder interface
Also update DriverConfigFile to use ProgrammaticBuilder, remove leak of Config in ProgrammaticDriverConfigLoader.
1 parent 6b85c5d commit 2d27665

7 files changed

Lines changed: 316 additions & 357 deletions

File tree

core/src/main/java/com/datastax/oss/driver/api/core/config/DriverConfigProfile.java

Lines changed: 2 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
*
3737
* @see DriverConfig
3838
*/
39-
public interface DriverConfigProfile {
39+
public interface DriverConfigProfile extends ProgrammaticBuilder<DriverConfigProfile> {
4040

4141
/**
4242
* The name of the default profile (the string {@value}).
@@ -58,67 +58,33 @@ public interface DriverConfigProfile {
5858

5959
boolean getBoolean(@NonNull DriverOption option);
6060

61-
@NonNull
62-
DriverConfigProfile withBoolean(@NonNull DriverOption option, boolean value);
63-
6461
@NonNull
6562
List<Boolean> getBooleanList(@NonNull DriverOption option);
6663

67-
@NonNull
68-
DriverConfigProfile withBooleanList(@NonNull DriverOption option, @NonNull List<Boolean> value);
69-
7064
int getInt(@NonNull DriverOption option);
7165

72-
@NonNull
73-
DriverConfigProfile withInt(@NonNull DriverOption option, int value);
74-
7566
@NonNull
7667
List<Integer> getIntList(@NonNull DriverOption option);
7768

78-
@NonNull
79-
DriverConfigProfile withIntList(@NonNull DriverOption option, @NonNull List<Integer> value);
80-
8169
long getLong(@NonNull DriverOption option);
8270

83-
@NonNull
84-
DriverConfigProfile withLong(@NonNull DriverOption option, long value);
85-
8671
@NonNull
8772
List<Long> getLongList(@NonNull DriverOption option);
8873

89-
@NonNull
90-
DriverConfigProfile withLongList(@NonNull DriverOption option, @NonNull List<Long> value);
91-
9274
double getDouble(@NonNull DriverOption option);
9375

94-
@NonNull
95-
DriverConfigProfile withDouble(@NonNull DriverOption option, double value);
96-
9776
@NonNull
9877
List<Double> getDoubleList(@NonNull DriverOption option);
9978

100-
@NonNull
101-
DriverConfigProfile withDoubleList(@NonNull DriverOption option, @NonNull List<Double> value);
102-
10379
@NonNull
10480
String getString(@NonNull DriverOption option);
10581

106-
@NonNull
107-
DriverConfigProfile withString(@NonNull DriverOption option, @NonNull String value);
108-
10982
@NonNull
11083
List<String> getStringList(@NonNull DriverOption option);
11184

112-
@NonNull
113-
DriverConfigProfile withStringList(@NonNull DriverOption option, @NonNull List<String> value);
114-
11585
@NonNull
11686
Map<String, String> getStringMap(@NonNull DriverOption option);
11787

118-
@NonNull
119-
DriverConfigProfile withStringMap(
120-
@NonNull DriverOption option, @NonNull Map<String, String> value);
121-
12288
/**
12389
* @return a size in bytes. This is separate from {@link #getLong(DriverOption)}, in case
12490
* implementations want to allow users to provide sizes in a more human-readable way, for
@@ -128,32 +94,14 @@ DriverConfigProfile withStringMap(
12894

12995
/** @see #getBytes(DriverOption) */
13096
@NonNull
131-
DriverConfigProfile withBytes(@NonNull DriverOption option, long value);
132-
133-
/** @see #getBytes(DriverOption) */
134-
@NonNull
135-
List<Long> getBytesList(DriverOption option);
136-
137-
/** @see #getBytes(DriverOption) */
138-
@NonNull
139-
DriverConfigProfile withBytesList(@NonNull DriverOption option, @NonNull List<Long> value);
97+
List<Long> getBytesList(@NonNull DriverOption option);
14098

14199
@NonNull
142100
Duration getDuration(@NonNull DriverOption option);
143101

144-
@NonNull
145-
DriverConfigProfile withDuration(@NonNull DriverOption option, @NonNull Duration value);
146-
147102
@NonNull
148103
List<Duration> getDurationList(@NonNull DriverOption option);
149104

150-
@NonNull
151-
DriverConfigProfile withDurationList(@NonNull DriverOption option, @NonNull List<Duration> value);
152-
153-
/** Unsets an option. */
154-
@NonNull
155-
DriverConfigProfile without(@NonNull DriverOption option);
156-
157105
/**
158106
* Returns a representation of all the child options under a given option.
159107
*
Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
/*
2+
* Copyright DataStax, Inc.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package com.datastax.oss.driver.api.core.config;
17+
18+
import edu.umd.cs.findbugs.annotations.NonNull;
19+
import java.time.Duration;
20+
import java.util.List;
21+
import java.util.Map;
22+
23+
/**
24+
* A builder that allows providing typed configuration tied to {@link DriverOption}.
25+
*
26+
* <p>Rarely would one ever deal with this type directly. This interface is useful for defining
27+
* default methods so implementors only have to implement a small set of methods.
28+
*/
29+
public interface ProgrammaticBuilder<SelfT extends ProgrammaticBuilder> {
30+
31+
@NonNull
32+
default SelfT withBoolean(@NonNull DriverOption option, boolean value) {
33+
return with(option, value);
34+
}
35+
36+
@NonNull
37+
default SelfT withBooleanList(@NonNull DriverOption option, @NonNull List<Boolean> value) {
38+
return with(option, value);
39+
}
40+
41+
@NonNull
42+
default SelfT withInt(@NonNull DriverOption option, int value) {
43+
return with(option, value);
44+
}
45+
46+
@NonNull
47+
default SelfT withIntList(@NonNull DriverOption option, @NonNull List<Integer> value) {
48+
return with(option, value);
49+
}
50+
51+
@NonNull
52+
default SelfT withLong(@NonNull DriverOption option, long value) {
53+
return with(option, value);
54+
}
55+
56+
@NonNull
57+
default SelfT withLongList(@NonNull DriverOption option, @NonNull List<Long> value) {
58+
return with(option, value);
59+
}
60+
61+
@NonNull
62+
default SelfT withDouble(@NonNull DriverOption option, double value) {
63+
return with(option, value);
64+
}
65+
66+
@NonNull
67+
default SelfT withDoubleList(@NonNull DriverOption option, @NonNull List<Double> value) {
68+
return with(option, value);
69+
}
70+
71+
@NonNull
72+
default SelfT withString(@NonNull DriverOption option, @NonNull String value) {
73+
return with(option, value);
74+
}
75+
76+
@NonNull
77+
default SelfT withStringList(@NonNull DriverOption option, @NonNull List<String> value) {
78+
return with(option, value);
79+
}
80+
81+
@SuppressWarnings("unchecked")
82+
@NonNull
83+
default SelfT withStringMap(@NonNull DriverOption option, @NonNull Map<String, String> value) {
84+
SelfT v = (SelfT) this;
85+
for (String key : value.keySet()) {
86+
v = (SelfT) v.with(option.getPath() + "." + key, value.get(key));
87+
}
88+
return v;
89+
}
90+
91+
/**
92+
* Specifies a size in bytes. This is separate from {@link #withLong(DriverOption, long)}, in case
93+
* implementations want to allow users to provide sizes in a more human-readable way, for example
94+
* "256 MB".
95+
*/
96+
@NonNull
97+
default SelfT withBytes(@NonNull DriverOption option, @NonNull String value) {
98+
return with(option, value);
99+
}
100+
101+
@NonNull
102+
default SelfT withBytesList(@NonNull DriverOption option, @NonNull List<Long> value) {
103+
return with(option, value);
104+
}
105+
106+
@NonNull
107+
default SelfT withDuration(@NonNull DriverOption option, @NonNull Duration value) {
108+
return with(option, value);
109+
}
110+
111+
@NonNull
112+
default SelfT withDurationList(@NonNull DriverOption option, @NonNull List<Duration> value) {
113+
return with(option, value);
114+
}
115+
116+
@NonNull
117+
default SelfT withClass(@NonNull DriverOption option, @NonNull Class<?> value) {
118+
return with(option, value.getName());
119+
}
120+
121+
/** Unsets an option. */
122+
@NonNull
123+
default SelfT without(@NonNull DriverOption option) {
124+
return with(option, null);
125+
}
126+
127+
@NonNull
128+
default SelfT with(@NonNull DriverOption option, @NonNull Object value) {
129+
return with(option.getPath(), value);
130+
}
131+
132+
/**
133+
* Provides a simple path to value mapping, all default methods invoke this method directly. It is
134+
* not recommended that it is used directly other than by these defaults.
135+
*/
136+
@NonNull
137+
SelfT with(@NonNull String path, @NonNull Object value);
138+
}

0 commit comments

Comments
 (0)