| 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 → TIMED_OUT |
return Arrays.stream(StatusCode.values()) |
| 116 |
2
1. lambda$findByCode$0 : negated conditional → TIMED_OUT 2. lambda$findByCode$0 : replaced boolean return with true for com/renomad/minum/web/StatusLine$StatusCode::lambda$findByCode$0 → KILLED |
.filter(x -> x.code == code) |
| 117 | .findFirst() | |
| 118 | .orElseThrow(); | |
| 119 | } | |
| 120 | } | |
| 121 | ||
| 122 | } | |
Mutations | ||
| 115 |
1.1 |
|
| 116 |
1.1 2.2 |