Skip to content

Commit f7b3beb

Browse files
committed
context: add default value to Context value methods
- ref #3761
1 parent 22631cd commit f7b3beb

File tree

9 files changed

+153
-4
lines changed

9 files changed

+153
-4
lines changed

jooby/src/main/java/io/jooby/Context.java

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,15 @@ private static Selector single() {
185185
*/
186186
Value flash(@NonNull String name);
187187

188+
/**
189+
* Get a flash attribute.
190+
*
191+
* @param name Attribute's name.
192+
* @param defaultValue Default's value. Value won't be persisted to flash context.
193+
* @return Flash attribute.
194+
*/
195+
Value flash(@NonNull String name, @NonNull String defaultValue);
196+
188197
/**
189198
* Find a session or creates a new session.
190199
*
@@ -201,6 +210,16 @@ private static Selector single() {
201210
*/
202211
Value session(@NonNull String name);
203212

213+
/**
214+
* Find a session attribute using the given name. If there is no session or attribute under that
215+
* name a missing value is returned.
216+
*
217+
* @param name Attribute's name.
218+
* @param defaultValue Default's value. Value won't be persisted to session context.
219+
* @return Session's attribute or missing.
220+
*/
221+
Value session(@NonNull String name, @NonNull String defaultValue);
222+
204223
/**
205224
* Find an existing session.
206225
*
@@ -216,6 +235,15 @@ private static Selector single() {
216235
*/
217236
Value cookie(@NonNull String name);
218237

238+
/**
239+
* Get a cookie matching the given name.
240+
*
241+
* @param name Cookie's name.
242+
* @param defaultValue Default's value. Value won't be persisted to response context.
243+
* @return Cookie value.
244+
*/
245+
Value cookie(@NonNull String name, @NonNull String defaultValue);
246+
219247
/**
220248
* Request cookies.
221249
*
@@ -366,6 +394,25 @@ default String getContextPath() {
366394
*/
367395
Value query(@NonNull String name);
368396

397+
/**
398+
* Get a query parameter that matches the given name.
399+
*
400+
* <pre>{@code
401+
* {
402+
* get("/search", ctx -> {
403+
* String q = ctx.query("q").value();
404+
* ...
405+
* });
406+
*
407+
* }
408+
* }</pre>
409+
*
410+
* @param name Parameter name.
411+
* @param defaultValue Default value.
412+
* @return A query value.
413+
*/
414+
Value query(@NonNull String name, @NonNull String defaultValue);
415+
369416
/**
370417
* Query string with the leading <code>?</code> or empty string. This is the raw query string,
371418
* without decoding it.
@@ -417,6 +464,15 @@ default String getContextPath() {
417464
*/
418465
Value header(@NonNull String name);
419466

467+
/**
468+
* Get a header that matches the given name.
469+
*
470+
* @param name Header name. Case insensitive.
471+
* @param defaultValue Default value.
472+
* @return A header value or missing value, never a <code>null</code> reference.
473+
*/
474+
Value header(@NonNull String name, @NonNull String defaultValue);
475+
420476
/**
421477
* Header as single-value map.
422478
*

jooby/src/main/java/io/jooby/DefaultContext.java

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,12 @@ default Value flash(@NonNull String name) {
130130
return Value.create(getValueFactory(), name, flash().get(name));
131131
}
132132

133+
@Override
134+
default Value flash(@NonNull String name, @NonNull String defaultValue) {
135+
var value = flash(name);
136+
return value.isMissing() ? Value.value(getValueFactory(), name, defaultValue) : value;
137+
}
138+
133139
@Override
134140
default Value session(@NonNull String name) {
135141
Session session = sessionOrNull();
@@ -139,6 +145,12 @@ default Value session(@NonNull String name) {
139145
return Value.missing(getValueFactory(), name);
140146
}
141147

148+
@Override
149+
default Value session(@NonNull String name, @NonNull String defaultValue) {
150+
var value = session(name);
151+
return value.isMissing() ? Value.value(getValueFactory(), name, defaultValue) : value;
152+
}
153+
142154
@Override
143155
default Session session() {
144156
Session session = sessionOrNull();
@@ -177,10 +189,14 @@ default Object forward(@NonNull String path) {
177189

178190
@Override
179191
default Value cookie(@NonNull String name) {
180-
String value = cookieMap().get(name);
181-
return value == null
182-
? Value.missing(getValueFactory(), name)
183-
: Value.value(getValueFactory(), name, value);
192+
var value = cookieMap().get(name);
193+
return Value.create(getValueFactory(), name, value);
194+
}
195+
196+
@Override
197+
default Value cookie(@NonNull String name, @NonNull String defaultValue) {
198+
var value = cookie(name);
199+
return value.isMissing() ? Value.value(getValueFactory(), name, defaultValue) : value;
184200
}
185201

186202
/**
@@ -253,6 +269,11 @@ default Value query(@NonNull String name) {
253269
return query().get(name);
254270
}
255271

272+
@Override
273+
default Value query(@NonNull String name, @NonNull String defaultValue) {
274+
return query().getOrDefault(name, defaultValue);
275+
}
276+
256277
@Override
257278
default String queryString() {
258279
return query().queryString();
@@ -273,6 +294,11 @@ default Value header(@NonNull String name) {
273294
return header().get(name);
274295
}
275296

297+
@Override
298+
default Value header(@NonNull String name, @NonNull String defaultValue) {
299+
return header().getOrDefault(name, defaultValue);
300+
}
301+
276302
@Override
277303
default Map<String, String> headerMap() {
278304
return header().toMap();

jooby/src/main/java/io/jooby/ForwardingContext.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -700,11 +700,21 @@ public Value flash(@NonNull String name) {
700700
return ctx.flash(name);
701701
}
702702

703+
@Override
704+
public Value flash(@NonNull String name, @NonNull String defaultValue) {
705+
return ctx.flash(name, defaultValue);
706+
}
707+
703708
@Override
704709
public Value session(@NonNull String name) {
705710
return ctx.session(name);
706711
}
707712

713+
@Override
714+
public Value session(@NonNull String name, @NonNull String defaultValue) {
715+
return ctx.session(name, defaultValue);
716+
}
717+
708718
@Override
709719
public Session session() {
710720
return ctx.session();
@@ -720,6 +730,11 @@ public Value cookie(@NonNull String name) {
720730
return ctx.cookie(name);
721731
}
722732

733+
@Override
734+
public Value cookie(@NonNull String name, @NonNull String defaultValue) {
735+
return ctx.cookie(name, defaultValue);
736+
}
737+
723738
@Override
724739
public Map<String, String> cookieMap() {
725740
return ctx.cookieMap();
@@ -803,6 +818,11 @@ public Value query(@NonNull String name) {
803818
return ctx.query(name);
804819
}
805820

821+
@Override
822+
public Value query(@NonNull String name, @NonNull String defaultValue) {
823+
return ctx.query(name, defaultValue);
824+
}
825+
806826
@Override
807827
public String queryString() {
808828
return ctx.queryString();
@@ -828,6 +848,11 @@ public Value header(@NonNull String name) {
828848
return ctx.header(name);
829849
}
830850

851+
@Override
852+
public Value header(@NonNull String name, @NonNull String defaultValue) {
853+
return ctx.header(name, defaultValue);
854+
}
855+
831856
@Override
832857
public Map<String, String> headerMap() {
833858
return ctx.headerMap();

jooby/src/main/java/io/jooby/annotation/CookieParam.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,11 @@
2828
* @return Parameter name. Defaults to method parameter name.
2929
*/
3030
String name() default "";
31+
32+
/**
33+
* Default value.
34+
*
35+
* @return Default value.
36+
*/
37+
String value() default "";
3138
}

jooby/src/main/java/io/jooby/annotation/FlashParam.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,11 @@
2828
* @return Parameter name. Defaults to method parameter name.
2929
*/
3030
String name() default "";
31+
32+
/**
33+
* Default value.
34+
*
35+
* @return Default value.
36+
*/
37+
String value() default "";
3138
}

jooby/src/main/java/io/jooby/annotation/FormParam.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,11 @@
3636
* @return Parameter name. Defaults to method parameter name.
3737
*/
3838
String name() default "";
39+
40+
/**
41+
* Default value.
42+
*
43+
* @return Default value.
44+
*/
45+
String value() default "";
3946
}

jooby/src/main/java/io/jooby/annotation/HeaderParam.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,11 @@
3333
* @return Parameter name. Defaults to method parameter name.
3434
*/
3535
String name() default "";
36+
37+
/**
38+
* Default value.
39+
*
40+
* @return Default value.
41+
*/
42+
String value() default "";
3643
}

jooby/src/main/java/io/jooby/annotation/QueryParam.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,11 @@
2828
* @return Parameter name. Defaults to method parameter name.
2929
*/
3030
String name() default "";
31+
32+
/**
33+
* Default value.
34+
*
35+
* @return Default value.
36+
*/
37+
String value() default "";
3138
}

jooby/src/main/java/io/jooby/annotation/SessionParam.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,11 @@
3333
* @return Session attribute's name. Defaults to method parameter name.
3434
*/
3535
String name() default "";
36+
37+
/**
38+
* Default value.
39+
*
40+
* @return Default value.
41+
*/
42+
String value() default "";
3643
}

0 commit comments

Comments
 (0)