|
14 | 14 | package com.lancedb.lance.namespace; |
15 | 15 |
|
16 | 16 | import com.lancedb.lance.namespace.client.apache.ApiException; |
| 17 | +import com.lancedb.lance.namespace.model.ErrorResponse; |
17 | 18 |
|
18 | 19 | public class LanceNamespaceException extends RuntimeException { |
19 | 20 |
|
20 | | - private final int code; |
21 | | - private final String responseBody; |
| 21 | + private final ErrorResponse errorResponse; |
22 | 22 |
|
23 | 23 | public LanceNamespaceException(ApiException e) { |
24 | 24 | // TODO: properly parse into ErrorResponse model |
25 | 25 | super(e.getResponseBody(), e); |
26 | | - this.code = e.getCode(); |
27 | | - this.responseBody = e.getResponseBody(); |
| 26 | + |
| 27 | + this.errorResponse = new ErrorResponse(); |
| 28 | + errorResponse.setStatus(e.getCode()); |
| 29 | + errorResponse.type("/errors/api-exception"); |
| 30 | + errorResponse.setTitle("Api Exception"); |
| 31 | + errorResponse.setInstance("/v1/namespaces"); |
| 32 | + errorResponse.setDetail(e.getResponseBody()); |
| 33 | + } |
| 34 | + |
| 35 | + public LanceNamespaceException(ErrorResponse errorResponse) { |
| 36 | + this.errorResponse = errorResponse; |
28 | 37 | } |
29 | 38 |
|
30 | 39 | public int getCode() { |
31 | | - return code; |
| 40 | + return errorResponse.getStatus(); |
| 41 | + } |
| 42 | + |
| 43 | + public ErrorResponse getErrorResponse() { |
| 44 | + return errorResponse; |
| 45 | + } |
| 46 | + |
| 47 | + public static LanceNamespaceException badRequest(String detail) { |
| 48 | + ErrorResponse errorResponse = new ErrorResponse(); |
| 49 | + errorResponse.type("/errors/bad-request"); |
| 50 | + errorResponse.setTitle("Malformed request"); |
| 51 | + errorResponse.setStatus(400); |
| 52 | + errorResponse.setDetail(detail); |
| 53 | + errorResponse.setInstance("/v1/namespaces"); |
| 54 | + return new LanceNamespaceException(errorResponse); |
| 55 | + } |
| 56 | + |
| 57 | + public static LanceNamespaceException unauthorized(String detail) { |
| 58 | + ErrorResponse errorResponse = new ErrorResponse(); |
| 59 | + errorResponse.type("/errors/unauthorized-request"); |
| 60 | + errorResponse.setTitle("No valid authentication credentials for the operation"); |
| 61 | + errorResponse.setStatus(401); |
| 62 | + errorResponse.setDetail(detail); |
| 63 | + errorResponse.setInstance("/v1/namespaces"); |
| 64 | + return new LanceNamespaceException(errorResponse); |
| 65 | + } |
| 66 | + |
| 67 | + public static LanceNamespaceException forbidden(String detail) { |
| 68 | + ErrorResponse errorResponse = new ErrorResponse(); |
| 69 | + errorResponse.type("/errors/forbidden-request"); |
| 70 | + errorResponse.setTitle("Not authorized to make this request"); |
| 71 | + errorResponse.setStatus(403); |
| 72 | + errorResponse.setDetail(detail); |
| 73 | + errorResponse.setInstance("/v1/namespaces"); |
| 74 | + return new LanceNamespaceException(errorResponse); |
| 75 | + } |
| 76 | + |
| 77 | + public static LanceNamespaceException notFound(String detail) { |
| 78 | + ErrorResponse errorResponse = new ErrorResponse(); |
| 79 | + errorResponse.type("/errors/not-found-error"); |
| 80 | + errorResponse.setTitle("Not found Error"); |
| 81 | + errorResponse.setStatus(404); |
| 82 | + errorResponse.setDetail(detail); |
| 83 | + errorResponse.setInstance("/v1/namespaces"); |
| 84 | + return new LanceNamespaceException(errorResponse); |
| 85 | + } |
| 86 | + |
| 87 | + public static LanceNamespaceException unsupportedOperation(String detail) { |
| 88 | + ErrorResponse errorResponse = new ErrorResponse(); |
| 89 | + errorResponse.type("/errors/unsupported-operation"); |
| 90 | + errorResponse.setTitle("The server does not support this operation"); |
| 91 | + errorResponse.setStatus(406); |
| 92 | + errorResponse.setDetail(detail); |
| 93 | + errorResponse.setInstance("/v1/namespaces"); |
| 94 | + return new LanceNamespaceException(errorResponse); |
| 95 | + } |
| 96 | + |
| 97 | + public static LanceNamespaceException conflict(String ns, String detail) { |
| 98 | + ErrorResponse errorResponse = new ErrorResponse(); |
| 99 | + errorResponse.type("/errors/conflict"); |
| 100 | + errorResponse.setTitle("The namespace has been concurrently modified"); |
| 101 | + errorResponse.setStatus(409); |
| 102 | + errorResponse.setDetail(detail); |
| 103 | + errorResponse.setInstance(String.format("/v1/namespaces/%s", ns)); |
| 104 | + return new LanceNamespaceException(errorResponse); |
| 105 | + } |
| 106 | + |
| 107 | + public static LanceNamespaceException serviceUnavailable(String detail) { |
| 108 | + ErrorResponse errorResponse = new ErrorResponse(); |
| 109 | + errorResponse.type("/errors/service-unavailable"); |
| 110 | + errorResponse.setTitle("Slow down"); |
| 111 | + errorResponse.setStatus(504); |
| 112 | + errorResponse.setDetail(detail); |
| 113 | + errorResponse.setInstance("/v1/namespaces"); |
| 114 | + return new LanceNamespaceException(errorResponse); |
32 | 115 | } |
33 | 116 |
|
34 | | - public String getResponseBody() { |
35 | | - return responseBody; |
| 117 | + public static LanceNamespaceException serverError(String detail) { |
| 118 | + ErrorResponse errorResponse = new ErrorResponse(); |
| 119 | + errorResponse.type("/errors/server-error"); |
| 120 | + errorResponse.setTitle("Internal Server Error"); |
| 121 | + errorResponse.setStatus(500); |
| 122 | + errorResponse.setDetail(detail); |
| 123 | + errorResponse.setInstance("/v1/namespaces"); |
| 124 | + return new LanceNamespaceException(errorResponse); |
36 | 125 | } |
37 | 126 | } |
0 commit comments