@@ -32,7 +32,13 @@ public class DbClientContext implements DbContext {
32
32
private final DbStatements statements ;
33
33
private final String dbType ;
34
34
35
- private DbClientContext (Builder builder ) {
35
+ /**
36
+ * Create an instance of client context.
37
+ *
38
+ * @param builder Builder for {@link DbClientContext}
39
+ */
40
+ protected DbClientContext (
41
+ BuilderBase <? extends BuilderBase <?, ? extends DbClientContext >, ? extends DbClientContext > builder ) {
36
42
this .dbMapperManager = builder .dbMapperManager ;
37
43
this .mapperManager = builder .mapperManager ;
38
44
this .clientServices = builder .clientServices ;
@@ -81,20 +87,33 @@ public static Builder builder() {
81
87
/**
82
88
* Builder for {@link DbClientContext}.
83
89
*/
84
- public static class Builder implements io .helidon .common .Builder <Builder , DbClientContext > {
90
+ public static final class Builder extends BuilderBase <Builder , DbClientContext > {
91
+
92
+ @ Override
93
+ public DbClientContext build () {
94
+ return new DbClientContext (this );
95
+ }
96
+
97
+ }
98
+
99
+ /**
100
+ * Base builder for {@link DbClientContext}.
101
+ *
102
+ * @param <B> type of the builder
103
+ * @param <T> type of the built instance
104
+ */
105
+ public abstract static class BuilderBase <B extends BuilderBase <B , T >, T extends DbClientContext > implements io .helidon .common .Builder <B , T > {
85
106
86
107
private DbMapperManager dbMapperManager ;
87
108
private MapperManager mapperManager ;
88
109
private List <DbClientService > clientServices = List .of ();
89
110
private DbStatements statements ;
90
111
private String dbType ;
91
112
92
- private Builder () {
93
- }
94
-
95
- @ Override
96
- public DbClientContext build () {
97
- return new DbClientContext (this );
113
+ /**
114
+ * Creates an instance of base builder for {@link DbClientContext}.
115
+ */
116
+ protected BuilderBase () {
98
117
}
99
118
100
119
/**
@@ -103,9 +122,9 @@ public DbClientContext build() {
103
122
* @param dbMapperManager DB mapper manager
104
123
* @return updated builder instance
105
124
*/
106
- public Builder dbMapperManager (DbMapperManager dbMapperManager ) {
125
+ public B dbMapperManager (DbMapperManager dbMapperManager ) {
107
126
this .dbMapperManager = dbMapperManager ;
108
- return this ;
127
+ return identity () ;
109
128
}
110
129
111
130
/**
@@ -114,9 +133,9 @@ public Builder dbMapperManager(DbMapperManager dbMapperManager) {
114
133
* @param mapperManager mapper manager
115
134
* @return updated builder instance
116
135
*/
117
- public Builder mapperManager (MapperManager mapperManager ) {
136
+ public B mapperManager (MapperManager mapperManager ) {
118
137
this .mapperManager = mapperManager ;
119
- return this ;
138
+ return identity () ;
120
139
}
121
140
122
141
/**
@@ -125,9 +144,9 @@ public Builder mapperManager(MapperManager mapperManager) {
125
144
* @param clientServices client service list
126
145
* @return updated builder instance
127
146
*/
128
- public Builder clientServices (List <DbClientService > clientServices ) {
147
+ public B clientServices (List <DbClientService > clientServices ) {
129
148
this .clientServices = clientServices ;
130
- return this ;
149
+ return identity () ;
131
150
}
132
151
133
152
/**
@@ -136,9 +155,9 @@ public Builder clientServices(List<DbClientService> clientServices) {
136
155
* @param statements statements
137
156
* @return updated builder instance
138
157
*/
139
- public Builder statements (DbStatements statements ) {
158
+ public B statements (DbStatements statements ) {
140
159
this .statements = statements ;
141
- return this ;
160
+ return identity () ;
142
161
}
143
162
144
163
/**
@@ -147,9 +166,9 @@ public Builder statements(DbStatements statements) {
147
166
* @param dbType database provider type
148
167
* @return updated builder instance
149
168
*/
150
- public Builder dbType (String dbType ) {
169
+ public B dbType (String dbType ) {
151
170
this .dbType = dbType ;
152
- return this ;
171
+ return identity () ;
153
172
}
154
173
}
155
174
}
0 commit comments