/*** * Copyright (c) 2009 Caelum - www.caelum.com.br/opensource * All rights reserved. * * 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 br.com.caelum.vraptor.restfulie.headers; import java.util.Calendar; import javax.servlet.http.HttpServletResponse; import br.com.caelum.vraptor.ioc.Component; import br.com.caelum.vraptor.restfulie.RestHeadersHandler; import br.com.caelum.vraptor.restfulie.hypermedia.HypermediaResource; import br.com.caelum.vraptor.restfulie.resource.Cacheable; import br.com.caelum.vraptor.restfulie.resource.RestfulEntity; @Component public class DefaultRestHeadersHandler implements RestHeadersHandler { private final HttpServletResponse response; private final RestDefaults defaults; public DefaultRestHeadersHandler(HttpServletResponse response, RestDefaults defaults) { this.defaults = defaults; this.response = response; } public void handle(HypermediaResource resource) { // TODO implement link headers if(Cacheable.class.isAssignableFrom(resource.getClass())) { Cacheable cache = (Cacheable) resource; response.addHeader("Cache-control","max-age=" + cache.getMaximumAge()); } if(RestfulEntity.class.isInstance(resource)) { RestfulEntity entity = (RestfulEntity) resource; restfulHeadersFor(entity.getEtag(), entity.getLastModified()); } else { restfulHeadersFor(defaults.getEtagFor(resource), defaults.getLastModifiedFor(resource)); } } private void restfulHeadersFor(String etag, Calendar lastModified) { response.addHeader("ETag", etag); if(lastModified!=null) { response.setDateHeader("Last-modified", lastModified.getTimeInMillis()); } } }