/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.web.portal.handler; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.StringUtils; import org.joda.time.DateTime; import org.springframework.beans.factory.annotation.Autowired; import com.enonic.cms.framework.util.HttpCacheControlSettings; import com.enonic.cms.framework.util.HttpServletUtil; import com.enonic.cms.core.Path; import com.enonic.cms.core.portal.livetrace.LivePortalTraceService; import com.enonic.cms.core.preview.PreviewService; import com.enonic.cms.core.security.AutoLoginService; import com.enonic.cms.core.security.SecurityService; import com.enonic.cms.core.structure.SitePath; import com.enonic.cms.core.structure.SitePropertiesService; import com.enonic.cms.core.structure.SiteService; import com.enonic.cms.core.time.TimeService; import com.enonic.cms.store.dao.ContentDao; import com.enonic.cms.store.dao.GroupDao; import com.enonic.cms.store.dao.SiteDao; import com.enonic.cms.store.dao.UserDao; import com.enonic.cms.web.portal.PortalWebContext; public abstract class WebHandlerBase implements WebHandler { protected TimeService timeService; protected SecurityService securityService; protected PreviewService previewService; protected LivePortalTraceService livePortalTraceService; protected SiteDao siteDao; protected SitePropertiesService sitePropertiesService; protected AutoLoginService autoLoginService; protected ContentDao contentDao; protected GroupDao groupDao; protected UserDao userDao; protected SiteService siteService; @Override public final boolean canHandle( final PortalWebContext context ) { return canHandle( context.getSitePath().getLocalPath() ); } protected abstract boolean canHandle( final Path localPath ); @Override public final void handle( final PortalWebContext context ) throws Exception { final SitePath originalSitePath = context.getOriginalSitePath(); if ( originalSitePath == null ) { siteService.checkSiteExist( context.getSitePath().getSiteKey() ); context.setOriginalSitePath( context.getSitePath() ); } doHandle( context ); } protected abstract void doHandle( final PortalWebContext context ) throws Exception; @Autowired public final void setTimeService( final TimeService timeService ) { this.timeService = timeService; } @Autowired public final void setSecurityService( final SecurityService securityService ) { this.securityService = securityService; } @Autowired public final void setLivePortalTraceService( final LivePortalTraceService livePortalTraceService ) { this.livePortalTraceService = livePortalTraceService; } @Autowired public final void setPreviewService( final PreviewService previewService ) { this.previewService = previewService; } @Autowired public final void setSiteDao( final SiteDao siteDao ) { this.siteDao = siteDao; } @Autowired public final void setSitePropertiesService( final SitePropertiesService sitePropertiesService ) { this.sitePropertiesService = sitePropertiesService; } @Autowired public final void setAutoLoginService( final AutoLoginService autoLoginService ) { this.autoLoginService = autoLoginService; } @Autowired public final void setContentDao( final ContentDao contentDao ) { this.contentDao = contentDao; } @Autowired public final void setGroupDao( final GroupDao groupDao ) { this.groupDao = groupDao; } @Autowired public final void setUserDao( final UserDao userDao ) { this.userDao = userDao; } @Autowired public final void setSiteService( final SiteService siteService ) { this.siteService = siteService; } protected final void enableHttpCacheHeaders( HttpServletResponse response, SitePath sitePath, DateTime now, Integer siteCacheSettingsMaxAge, boolean anonymousAccess ) { int maxAge; boolean cacheForever = hasTimestampParameter( sitePath ); if ( cacheForever ) { maxAge = HttpCacheControlSettings.CACHE_FOREVER_SECONDS; } else { maxAge = siteCacheSettingsMaxAge; } final DateTime expirationTime = now.plusSeconds( maxAge ); final HttpCacheControlSettings cacheControlSettings = new HttpCacheControlSettings(); cacheControlSettings.maxAgeSecondsToLive = (long) maxAge; cacheControlSettings.publicAccess = anonymousAccess; HttpServletUtil.setExpiresHeader( response, expirationTime.toDate() ); HttpServletUtil.setCacheControl( response, cacheControlSettings ); } protected final boolean hasTimestampParameter( SitePath sitePath ) { String timestamp = sitePath.getParam( "_ts" ); return StringUtils.isNotBlank( timestamp ); } }