001package ca.uhn.fhir.rest.server; 002 003/* 004 * #%L 005 * HAPI FHIR - Core Library 006 * %% 007 * Copyright (C) 2014 - 2016 University Health Network 008 * %% 009 * Licensed under the Apache License, Version 2.0 (the "License"); 010 * you may not use this file except in compliance with the License. 011 * You may obtain a copy of the License at 012 * 013 * http://www.apache.org/licenses/LICENSE-2.0 014 * 015 * Unless required by applicable law or agreed to in writing, software 016 * distributed under the License is distributed on an "AS IS" BASIS, 017 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 018 * See the License for the specific language governing permissions and 019 * limitations under the License. 020 * #L% 021 */ 022 023import java.nio.charset.Charset; 024import java.util.Collections; 025import java.util.HashMap; 026import java.util.HashSet; 027import java.util.Map; 028import java.util.Set; 029 030public class Constants { 031 032 public static final String CHARSET_NAME_UTF8 = "UTF-8"; 033 public static final Charset CHARSET_UTF8; 034 public static final String CHARSET_UTF8_CTSUFFIX = "; charset=" + CHARSET_NAME_UTF8; 035 public static final String CT_ATOM_XML = "application/atom+xml"; 036 public static final String CT_FHIR_JSON = "application/json+fhir"; 037 public static final String CT_FHIR_XML = "application/xml+fhir"; 038 public static final String CT_HTML = "text/html"; 039 public static final String CT_HTML_WITH_UTF8 = "text/html" + CHARSET_UTF8_CTSUFFIX; 040 public static final String CT_JSON = "application/json"; 041 public static final String CT_OCTET_STREAM = "application/octet-stream"; 042 public static final String CT_TEXT = "text/plain"; 043 public static final String CT_TEXT_WITH_UTF8 = CT_TEXT + CHARSET_UTF8_CTSUFFIX; 044 public static final String CT_XML = "application/xml"; 045 public static final String ENCODING_GZIP = "gzip"; 046 public static final String EXTOP_VALIDATE = "$validate"; 047 public static final String EXTOP_VALIDATE_MODE = "mode"; 048 public static final String EXTOP_VALIDATE_PROFILE = "profile"; 049 public static final String EXTOP_VALIDATE_RESOURCE = "resource"; 050 public static final String FORMAT_JSON = "json"; 051 public static final Set<String> FORMAT_VAL_JSON; 052 public static final Map<String, EncodingEnum> FORMAT_VAL_TO_ENCODING; 053 public static final Set<String> FORMAT_VAL_XML; 054 public static final String FORMAT_XML = "xml"; 055 public static final String HEADER_ACCEPT = "Accept"; 056 public static final String HEADER_ACCEPT_ENCODING = "Accept-Encoding"; 057 public static final String HEADER_ACCEPT_VALUE_ALL = CT_FHIR_XML + ";q=1.0, " + CT_FHIR_JSON + ";q=1.0"; 058 public static final String HEADER_ALLOW = "Allow"; 059 public static final String HEADER_AUTHORIZATION = "Authorization"; 060 public static final String HEADER_AUTHORIZATION_VALPREFIX_BASIC = "Basic "; 061 public static final String HEADER_AUTHORIZATION_VALPREFIX_BEARER = "Bearer "; 062 public static final String HEADER_CATEGORY = "Category"; 063 public static final String HEADER_CATEGORY_LC = HEADER_CATEGORY.toLowerCase(); 064 public static final String HEADER_CONTENT_DISPOSITION = "Content-Disposition"; 065 public static final String HEADER_CONTENT_ENCODING = "Content-Encoding"; 066 public static final String HEADER_CONTENT_LOCATION = "Content-Location"; 067 public static final String HEADER_CONTENT_LOCATION_LC = HEADER_CONTENT_LOCATION.toLowerCase(); 068 public static final String HEADER_CONTENT_TYPE = "Content-Type"; 069 public static final String HEADER_COOKIE = "Cookie"; 070 public static final String HEADER_CORS_ALLOW_METHODS = "Access-Control-Allow-Methods"; 071 public static final String HEADER_CORS_ALLOW_ORIGIN = "Access-Control-Allow-Origin"; 072 public static final String HEADER_CORS_EXPOSE_HEADERS = "Access-Control-Expose-Headers"; 073 public static final String HEADER_ETAG = "ETag"; 074 public static final String HEADER_ETAG_LC = HEADER_ETAG.toLowerCase(); 075 public static final String HEADER_IF_MATCH = "If-Match"; 076 public static final String HEADER_IF_MATCH_LC = HEADER_IF_MATCH.toLowerCase(); 077 public static final String HEADER_IF_NONE_EXIST = "If-None-Exist"; 078 public static final String HEADER_IF_NONE_EXIST_LC = HEADER_IF_NONE_EXIST.toLowerCase(); 079 public static final String HEADER_IF_NONE_MATCH = "If-None-Match"; 080 public static final String HEADER_IF_NONE_MATCH_LC = HEADER_IF_NONE_MATCH.toLowerCase(); 081 public static final String HEADER_LAST_MODIFIED = "Last-Modified"; 082 public static final String HEADER_LAST_MODIFIED_LOWERCASE = HEADER_LAST_MODIFIED.toLowerCase(); 083 public static final String HEADER_LOCATION = "Location"; 084 public static final String HEADER_LOCATION_LC = HEADER_LOCATION.toLowerCase(); 085 public static final String HEADER_PREFER = "Prefer"; 086 public static final String HEADER_PREFER_RETURN = "return"; 087 public static final String HEADER_PREFER_RETURN_MINIMAL = "minimal"; 088 public static final String HEADER_PREFER_RETURN_REPRESENTATION = "representation"; 089 public static final String HEADER_SUFFIX_CT_UTF_8 = "; charset=UTF-8"; 090 public static final String HEADERVALUE_CORS_ALLOW_METHODS_ALL = "GET, POST, PUT, DELETE, OPTIONS"; 091 public static final Map<Integer, String> HTTP_STATUS_NAMES; 092 public static final String LINK_FHIR_BASE = "fhir-base"; 093 public static final String LINK_FIRST = "first"; 094 public static final String LINK_LAST = "last"; 095 public static final String LINK_NEXT = "next"; 096 public static final String LINK_PREVIOUS = "previous"; 097 public static final String LINK_SELF = "self"; 098 public static final String OPENSEARCH_NS_OLDER = "http://purl.org/atompub/tombstones/1.0"; 099 public static final String PARAM_COUNT = "_count"; 100 public static final String PARAM_DELETE = "_delete"; 101 public static final String PARAM_ELEMENTS = "_elements"; 102 public static final String PARAM_FORMAT = "_format"; 103 public static final String PARAM_HISTORY = "_history"; 104 public static final String PARAM_INCLUDE = "_include"; 105 public static final String PARAM_INCLUDE_QUALIFIER_RECURSE = ":recurse"; 106 public static final String PARAM_INCLUDE_RECURSE = "_include"+PARAM_INCLUDE_QUALIFIER_RECURSE; 107 public static final String PARAM_LASTUPDATED = "_lastUpdated"; 108 public static final String PARAM_NARRATIVE = "_narrative"; 109 public static final String PARAM_PAGINGACTION = "_getpages"; 110 public static final String PARAM_PAGINGOFFSET = "_getpagesoffset"; 111 public static final String PARAM_PRETTY = "_pretty"; 112 public static final String PARAM_PRETTY_VALUE_TRUE = "true"; 113 public static final String PARAM_PROFILE = "_profile"; 114 public static final String PARAM_QUERY = "_query"; 115 public static final String PARAM_REVINCLUDE = "_revinclude"; 116 public static final String PARAM_SEARCH = "_search"; 117 public static final String PARAM_SECURITY = "_security"; 118 public static final String PARAM_SINCE = "_since"; 119 public static final String PARAM_SORT = "_sort"; 120 public static final String PARAM_SORT_ASC = "_sort:asc"; 121 public static final String PARAM_SORT_DESC = "_sort:desc"; 122 public static final String PARAM_SUMMARY = "_summary"; 123 public static final String PARAM_TAG = "_tag"; 124 public static final String PARAM_TAGS = "_tags"; 125 public static final String PARAM_VALIDATE = "_validate"; 126 public static final String PARAMQUALIFIER_MISSING = ":missing"; 127 public static final String PARAMQUALIFIER_MISSING_FALSE = "false"; 128 public static final String PARAMQUALIFIER_MISSING_TRUE = "true"; 129 public static final String PARAMQUALIFIER_STRING_EXACT = ":exact"; 130 public static final String PARAMQUALIFIER_STRING_CONTAINS = ":contains"; 131 public static final String PARAMQUALIFIER_TOKEN_TEXT = ":text"; 132 public static final int STATUS_HTTP_200_OK = 200; 133 public static final int STATUS_HTTP_201_CREATED = 201; 134 public static final int STATUS_HTTP_204_NO_CONTENT = 204; 135 public static final int STATUS_HTTP_304_NOT_MODIFIED = 304; 136 public static final int STATUS_HTTP_400_BAD_REQUEST = 400; 137 public static final int STATUS_HTTP_401_CLIENT_UNAUTHORIZED = 401; 138 public static final int STATUS_HTTP_403_FORBIDDEN = 403; 139 public static final int STATUS_HTTP_404_NOT_FOUND = 404; 140 public static final int STATUS_HTTP_405_METHOD_NOT_ALLOWED = 405; 141 public static final int STATUS_HTTP_409_CONFLICT = 409; 142 public static final int STATUS_HTTP_410_GONE = 410; 143 public static final int STATUS_HTTP_412_PRECONDITION_FAILED = 412; 144 public static final int STATUS_HTTP_422_UNPROCESSABLE_ENTITY = 422; 145 public static final int STATUS_HTTP_500_INTERNAL_ERROR = 500; 146 public static final int STATUS_HTTP_501_NOT_IMPLEMENTED = 501; 147 public static final String TAG_SUBSETTED_CODE = "SUBSETTED"; 148 public static final String TAG_SUBSETTED_SYSTEM = "http://hl7.org/fhir/v3/ObservationValue"; 149 public static final String URL_TOKEN_HISTORY = "_history"; 150 public static final String URL_TOKEN_METADATA = "metadata"; 151 public static final String PARAM_CONTENT = "_content"; 152 public static final String PARAM_TEXT = "_text"; 153 154 /** 155 * Used in paging links 156 */ 157 public static final Object PARAM_BUNDLETYPE = "_bundletype"; 158 159 static { 160 Map<String, EncodingEnum> valToEncoding = new HashMap<String, EncodingEnum>(); 161 162 HashSet<String> valXml = new HashSet<String>(); 163 valXml.add(CT_FHIR_XML); 164 valXml.add("text/xml"); 165 valXml.add("application/xml"); 166 valXml.add("xml"); 167 FORMAT_VAL_XML = Collections.unmodifiableSet(valXml); 168 for (String string : valXml) { 169 valToEncoding.put(string, EncodingEnum.XML); 170 } 171 172 HashSet<String> valJson = new HashSet<String>(); 173 valJson.add(CT_FHIR_JSON); 174 valJson.add("text/json"); 175 valJson.add("application/json"); 176 valJson.add("json"); 177 FORMAT_VAL_JSON = Collections.unmodifiableSet(valJson); 178 for (String string : valJson) { 179 valToEncoding.put(string, EncodingEnum.JSON); 180 } 181 182 FORMAT_VAL_TO_ENCODING = Collections.unmodifiableMap(valToEncoding); 183 184 CHARSET_UTF8 = Charset.forName(CHARSET_NAME_UTF8); 185 186 HashMap<Integer, String> statusNames = new HashMap<Integer, String>(); 187 188 statusNames.put(200, "OK"); 189 statusNames.put(201, "Created"); 190 statusNames.put(202, "Accepted"); 191 statusNames.put(203, "Non-Authoritative Information"); 192 statusNames.put(204, "No Content"); 193 statusNames.put(205, "Reset Content"); 194 statusNames.put(206, "Partial Content"); 195 statusNames.put(207, "Multi-Status"); 196 statusNames.put(208, "Already Reported"); 197 statusNames.put(226, "IM Used"); 198 statusNames.put(300, "Multiple Choices"); 199 statusNames.put(301, "Moved Permanently"); 200 statusNames.put(302, "Found"); 201 statusNames.put(302, "Moved Temporarily"); 202 statusNames.put(303, "See Other"); 203 statusNames.put(304, "Not Modified"); 204 statusNames.put(305, "Use Proxy"); 205 statusNames.put(307, "Temporary Redirect"); 206 statusNames.put(308, "Permanent Redirect"); 207 statusNames.put(400, "Bad Request"); 208 statusNames.put(401, "Unauthorized"); 209 statusNames.put(402, "Payment Required"); 210 statusNames.put(403, "Forbidden"); 211 statusNames.put(404, "Not Found"); 212 statusNames.put(405, "Method Not Allowed"); 213 statusNames.put(406, "Not Acceptable"); 214 statusNames.put(407, "Proxy Authentication Required"); 215 statusNames.put(408, "Request Timeout"); 216 statusNames.put(409, "Conflict"); 217 statusNames.put(410, "Gone"); 218 statusNames.put(411, "Length Required"); 219 statusNames.put(412, "Precondition Failed"); 220 statusNames.put(413, "Payload Too Large"); 221 statusNames.put(413, "Request Entity Too Large"); 222 statusNames.put(414, "URI Too Long"); 223 statusNames.put(414, "Request-URI Too Long"); 224 statusNames.put(415, "Unsupported Media Type"); 225 statusNames.put(416, "Requested range not satisfiable"); 226 statusNames.put(417, "Expectation Failed"); 227 statusNames.put(418, "I'm a teapot"); 228 statusNames.put(419, "Insufficient Space On Resource"); 229 statusNames.put(420, "Method Failure"); 230 statusNames.put(421, "Destination Locked"); 231 statusNames.put(422, "Unprocessable Entity"); 232 statusNames.put(423, "Locked"); 233 statusNames.put(424, "Failed Dependency"); 234 statusNames.put(426, "Upgrade Required"); 235 statusNames.put(428, "Precondition Required"); 236 statusNames.put(429, "Too Many Requests"); 237 statusNames.put(431, "Request Header Fields Too Large"); 238 statusNames.put(500, "Internal Server Error"); 239 statusNames.put(501, "Not Implemented"); 240 statusNames.put(502, "Bad Gateway"); 241 statusNames.put(503, "Service Unavailable"); 242 statusNames.put(504, "Gateway Timeout"); 243 statusNames.put(505, "HTTP Version not supported"); 244 statusNames.put(506, "Variant Also Negotiates"); 245 statusNames.put(507, "Insufficient Storage"); 246 statusNames.put(508, "Loop Detected"); 247 statusNames.put(509, "Bandwidth Limit Exceeded"); 248 statusNames.put(510, "Not Extended"); 249 statusNames.put(511, "Network Authentication Required"); 250 HTTP_STATUS_NAMES = Collections.unmodifiableMap(statusNames); 251 } 252 253}