/* * Copyright 2007 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.google.gwt.dev.util; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Locale; /** * HTTP header strings defined by RFCs. */ public final class HttpHeaders { public static final long MS_SEC = 1000; public static final long MS_MIN = MS_SEC * 60; public static final long MS_HR = MS_MIN * 60; public static final long MS_DAY = MS_HR * 24; public static final long SEC_MIN = 60; public static final long SEC_HR = SEC_MIN * 60; public static final long SEC_DAY = SEC_HR * 24; public static final long SEC_YR = SEC_DAY * 365; public static final String CACHE_CONTROL = "Cache-Control"; public static final String CACHE_CONTROL_MAXAGE = "max-age="; public static final String CACHE_CONTROL_MUST_REVALIDATE = "must-revalidate"; public static final String CACHE_CONTROL_NO_CACHE = "no-cache"; public static final String CACHE_CONTROL_PRIVATE = "private"; public static final String CACHE_CONTROL_PUBLIC = "public"; public static final String CONTENT_ENCODING = "Content-Encoding"; public static final String CONTENT_ENCODING_GZIP = "gzip"; public static final String CONTENT_LENGTH = "Content-Length"; public static final String CONTENT_TYPE = "Content-Type"; public static final String CONTENT_TYPE_APPLICATION_XJAVASCRIPT_UTF8 = "application/x-javascript; charset=utf-8"; public static final String CONTENT_TYPE_TEXT_CSS = "text/css"; public static final String CONTENT_TYPE_TEXT_HTML = "text/html"; public static final String CONTENT_TYPE_TEXT_HTML_UTF8 = "text/html; charset=utf-8"; public static final String CONTENT_TYPE_TEXT_PLAIN = "text/plain"; public static final String DATE = "Date"; public static final String ETAG = "ETag"; public static final String EXPIRES = "Expires"; public static final String IF_MODIFIED_SINCE = "If-Modified-Since"; public static final String IF_NONE_MATCH = "If-None-Match"; public static final String LAST_MODIFIED = "Last-Modified"; /** * The Internet date format for HTTP. */ private static DateFormat sHttpDateFormat = new SimpleDateFormat( "EEE, d MMM yyyy HH:mm:ss", Locale.US); /** * Converts an HTTP date string into a file-style date/time. */ public static long fromInternetDateFormat(String timeStr) { Date dateGmt; try { synchronized (sHttpDateFormat) { dateGmt = sHttpDateFormat.parse(timeStr); } } catch (ParseException e) { return 0; } dateGmt = gmtToDate(dateGmt); return dateGmt.getTime(); } /** * Converts a file-style date/time into a string form that is compatible with * HTTP. */ public static String toInternetDateFormat(long time) { Date date = dateToGMT(new Date(time)); String dateGmt; synchronized (sHttpDateFormat) { dateGmt = sHttpDateFormat.format(date) + " GMT"; } return dateGmt; } /** * Converts a local date to GMT. * * @param date the date in the local time zone * @return the GMT version */ private static Date dateToGMT(Date date) { Calendar cal = Calendar.getInstance(); long tzMillis = cal.get(Calendar.ZONE_OFFSET) + cal.get(Calendar.DST_OFFSET); return new Date(date.getTime() - tzMillis); } /** * Converts a GMT into a local date. * * @param date the date in GMT * @return the the local time zone version */ private static Date gmtToDate(Date date) { Calendar cal = Calendar.getInstance(); long tzMillis = cal.get(Calendar.ZONE_OFFSET) + cal.get(Calendar.DST_OFFSET); return new Date(date.getTime() + tzMillis); } }