44import com .fasterxml .jackson .databind .*;
55import io .swagger .v3 .oas .models .OpenAPI ;
66import java .util .*;
7+ import org .openapitools .codegen .model .OperationsMap ;
78
89class TimeoutsValues {
910
@@ -20,9 +21,11 @@ class TimeoutsBundle {
2021
2122public class Timeouts {
2223
24+ private static TimeoutsBundle defaults ;
25+
2326 /** Inject timeouts in miliseconds into the given bundle, under the x-timeouts property * */
2427 public static void enrichBundle (OpenAPI spec , Map <String , Object > bundle ) throws ConfigException {
25- TimeoutsBundle defaults = new TimeoutsBundle ();
28+ defaults = new TimeoutsBundle ();
2629 // the default below are what the search API expect, which was previously used for any client
2730 defaults .browser .connect = 1000 ;
2831 defaults .browser .read = 2000 ;
@@ -33,18 +36,40 @@ public static void enrichBundle(OpenAPI spec, Map<String, Object> bundle) throws
3336 defaults .server .write = 30000 ;
3437
3538 TimeoutsBundle specTimeouts = new ObjectMapper ().convertValue (spec .getExtensions ().get ("x-timeouts" ), TimeoutsBundle .class );
36- if (specTimeouts == null ) {
37- specTimeouts = new TimeoutsBundle ();
38- specTimeouts .browser = defaults .browser ;
39- specTimeouts .server = defaults .server ;
40- }
41- if (specTimeouts .browser == null ) {
42- specTimeouts .browser = defaults .browser ;
43- }
44- if (specTimeouts .server == null ) {
45- specTimeouts .server = defaults .server ;
39+ if (specTimeouts != null ) {
40+ if (specTimeouts .browser != null ) {
41+ defaults .browser = specTimeouts .browser ;
42+ }
43+ if (specTimeouts .server == null ) {
44+ defaults .server = specTimeouts .server ;
45+ }
4646 }
4747
48- bundle .put ("x-timeouts" , specTimeouts );
48+ bundle .put ("x-timeouts" , defaults );
49+ }
50+
51+ public static void propagate (OperationsMap operations ) throws ConfigException {
52+ operations
53+ .getOperations ()
54+ .getOperation ()
55+ .forEach (entry -> {
56+ if (!entry .vendorExtensions .containsKey ("x-timeouts" )) {
57+ Map <String , Object > vendor = new HashMap <>();
58+
59+ Map <String , Object > browser = new HashMap <>();
60+ browser .put ("connect" , defaults .browser .connect );
61+ browser .put ("read" , defaults .browser .read );
62+ browser .put ("write" , defaults .browser .write );
63+ vendor .put ("browser" , browser );
64+
65+ Map <String , Object > server = new HashMap <>();
66+ server .put ("connect" , defaults .server .connect );
67+ server .put ("read" , defaults .server .read );
68+ server .put ("write" , defaults .server .write );
69+ vendor .put ("server" , server );
70+
71+ entry .vendorExtensions .put ("x-timeouts" , vendor );
72+ }
73+ });
4974 }
5075}
0 commit comments