1 | package com.renomad.minum.web; | |
2 | ||
3 | import java.util.Arrays; | |
4 | ||
5 | /** | |
6 | * This class represents the text that is sent back in a {@link Response} | |
7 | */ | |
8 | public record StatusLine(StatusCode status, HttpVersion version, String rawValue) { | |
9 | ||
10 | static final StatusLine EMPTY = new StatusLine(StatusCode.NULL, HttpVersion.NONE, ""); | |
11 | ||
12 | /** | |
13 | * See <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Status">Status Codes</a> | |
14 | */ | |
15 | public enum StatusCode{ | |
16 | ||
17 | /* Information responses */ | |
18 | CODE_100_CONTINUE(100, "CONTINUE"), | |
19 | CODE_101_SWITCHING_PROTOCOLS(101, "SWITCHING PROTOCOLS"), | |
20 | CODE_102_PROCESSING(102, "PROCESSING"), | |
21 | CODE_103_EARLY_HINTS(103, "EARLY HINTS"), | |
22 | ||
23 | ||
24 | /* Successful responses (200 – 299) */ | |
25 | ||
26 | CODE_200_OK(200, "OK"), | |
27 | CODE_201_CREATED(201, "CREATED"), | |
28 | CODE_202_ACCEPTED(202, "ACCEPTED"), | |
29 | CODE_203_NON_AUTHORITATIVE_INFORMATION(203, "NON-AUTHORITATIVE INFORMATION"), | |
30 | CODE_204_NO_CONTENT(204, "NO CONTENT"), | |
31 | CODE_205_RESET_CONTENT(205, "RESET CONTENT"), | |
32 | CODE_206_PARTIAL_CONTENT(206, "PARTIAL CONTENT"), | |
33 | CODE_207_MULTI_STATUS(207, "MULTI-STATUS"), | |
34 | CODE_208_ALREADY_REPORTED(208, "ALREADY REPORTED"), | |
35 | CODE_226_IM_USED(226, "IM USED"), | |
36 | ||
37 | /* Redirection messages (300 – 399) */ | |
38 | ||
39 | CODE_300_MULTIPLE_CHOICES(300, "MULTIPLE CHOICES"), | |
40 | CODE_301_MOVED_PERMANENTLY(301, "MOVED PERMANENTLY"), | |
41 | CODE_302_FOUND(302, "FOUND"), | |
42 | ||
43 | /** | |
44 | * Used a lot after receiving a post response. The pattern is to | |
45 | * receive the post, then redirect to a new page. See <a href="https://en.wikipedia.org/wiki/Post/Redirect/Get">...</a> | |
46 | */ | |
47 | CODE_303_SEE_OTHER(303, "SEE OTHER"), | |
48 | CODE_304_NOT_MODIFIED(304, "NOT MODIFIED"), | |
49 | CODE_305_USE_PROXY(305, "USE PROXY"), | |
50 | CODE_306_UNUSED(306, "UNUSED"), | |
51 | CODE_307_TEMPORARY_REDIRECT(307, "TEMPORARY REDIRECT"), | |
52 | CODE_308_PERMANENT_REDIRECT(308, "PERMANENT REDIRECT"), | |
53 | ||
54 | /* Client error responses (400 – 499) */ | |
55 | ||
56 | CODE_400_BAD_REQUEST(400, "BAD REQUEST"), | |
57 | CODE_401_UNAUTHORIZED(401, "UNAUTHORIZED"), | |
58 | CODE_402_PAYMENT_REQUIRED(402, "PAYMENT REQUIRED"), | |
59 | CODE_403_FORBIDDEN(403, "FORBIDDEN"), | |
60 | CODE_404_NOT_FOUND(404, "NOT FOUND"), | |
61 | CODE_405_METHOD_NOT_ALLOWED(405, "METHOD NOT ALLOWED"), | |
62 | CODE_406_NOT_ACCEPTABLE(406, "NOT ACCEPTABLE"), | |
63 | CODE_407_PROXY_AUTHENTICATION_REQUIRED(407, "PROXY AUTHENTICATION REQUIRED"), | |
64 | CODE_408_REQUEST_TIMEOUT(408, "REQUEST TIMEOUT"), | |
65 | CODE_409_CONFLICT(409, "CONFLICT"), | |
66 | CODE_410_GONE(410, "GONE"), | |
67 | CODE_411_LENGTH_REQUIRED(411, "LENGTH REQUIRED"), | |
68 | CODE_412_PRECONDITION_FAILED(412, "PRECONDITION FAILED"), | |
69 | CODE_413_PAYLOAD_TOO_LARGE(413, "PAYLOAD TOO LARGE"), | |
70 | CODE_414_URI_TOO_LONG(414, "URI TOO LONG"), | |
71 | CODE_415_UNSUPPORTED_MEDIA_TYPE(415, "UNSUPPORTED MEDIA TYPE"), | |
72 | CODE_416_RANGE_NOT_SATISFIABLE(416, "RANGE NOT SATISFIABLE"), | |
73 | CODE_417_EXPECTATION_FAILED(417, "EXPECTATION FAILED"), | |
74 | CODE_418_IM_A_TEAPOT(418, "IM A TEAPOT"), | |
75 | CODE_421_MISDIRECTED_REQUEST(421, "MISDIRECTED REQUEST"), | |
76 | CODE_422_UNPROCESSABLE_CONTENT(422, "UNPROCESSABLE CONTENT"), | |
77 | CODE_423_LOCKED(423, "LOCKED"), | |
78 | CODE_424_FAILED_DEPENDENCY(424, "FAILED DEPENDENCY"), | |
79 | CODE_425_TOO_EARLY(425, "TOO EARLY"), | |
80 | CODE_426_UPGRADE_REQUIRED(426, "UPGRADE REQUIRED"), | |
81 | CODE_428_PRECONDITION_REQUIRED(428, "PRECONDITION REQUIRED"), | |
82 | CODE_429_TOO_MANY_REQUESTS(429, "TOO MANY REQUESTS"), | |
83 | CODE_431_REQUEST_HEADER_FIELDS_TOO_LARGE(431, "REQUEST HEADER FIELDS TOO LARGE"), | |
84 | CODE_451_UNAVAILABLE_FOR_LEGAL_REASONS(451, "UNAVAILABLE FOR LEGAL REASONS"), | |
85 | ||
86 | /* Server error responses (500 – 599) */ | |
87 | ||
88 | CODE_500_INTERNAL_SERVER_ERROR(500, "INTERNAL SERVER ERROR"), | |
89 | CODE_501_NOT_IMPLEMENTED(501, "NOT IMPLEMENTED"), | |
90 | CODE_502_BAD_GATEWAY(502, "BAD GATEWAY"), | |
91 | CODE_503_SERVICE_UNAVAILABLE(503, "SERVICE UNAVAILABLE"), | |
92 | CODE_504_GATEWAY_TIMEOUT(504, "GATEWAY TIMEOUT"), | |
93 | CODE_505_HTTP_VERSION_NOT_SUPPORTED(505, "HTTP VERSION NOT SUPPORTED"), | |
94 | CODE_506_VARIANT_ALSO_NEGOTIATES(506, "VARIANT ALSO NEGOTIATES"), | |
95 | CODE_507_INSUFFICIENT_STORAGE(507, "INSUFFICIENT STORAGE"), | |
96 | CODE_508_LOOP_DETECTED(508, "LOOP DETECTED"), | |
97 | CODE_510_NOT_EXTENDED(510, "NOT EXTENDED"), | |
98 | CODE_511_NETWORK_AUTHENTICATION_REQUIRED(511, "NETWORK AUTHENTICATION REQUIRED"), | |
99 | ||
100 | /** | |
101 | * The null object, meant to represent "no status code" | |
102 | */ | |
103 | NULL(0, "NULL OBJECT") | |
104 | ; | |
105 | ||
106 | public final int code; | |
107 | public final String shortDescription; | |
108 | ||
109 | StatusCode(int code, String shortDescription) { | |
110 | this.code = code; | |
111 | this.shortDescription = shortDescription; | |
112 | } | |
113 | ||
114 | static StatusCode findByCode(int code) { | |
115 |
1
1. findByCode : replaced return value with null for com/renomad/minum/web/StatusLine$StatusCode::findByCode → KILLED |
return Arrays.stream(StatusCode.values()) |
116 |
2
1. lambda$findByCode$0 : replaced boolean return with true for com/renomad/minum/web/StatusLine$StatusCode::lambda$findByCode$0 → KILLED 2. lambda$findByCode$0 : negated conditional → KILLED |
.filter(x -> x.code == code) |
117 | .findFirst() | |
118 | .orElseThrow(); | |
119 | } | |
120 | } | |
121 | ||
122 | } | |
Mutations | ||
115 |
1.1 |
|
116 |
1.1 2.2 |