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}