/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.web.portal.page; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.enonic.cms.core.Path; import com.enonic.cms.core.portal.PortalRequest; import com.enonic.cms.core.portal.PortalResponse; import com.enonic.cms.core.portal.RedirectInstruction; import com.enonic.cms.core.portal.ResourceNotFoundException; import com.enonic.cms.core.structure.SitePath; import com.enonic.cms.core.structure.menuitem.MenuItemEntity; import com.enonic.cms.core.structure.menuitem.MenuItemKey; import com.enonic.cms.store.dao.MenuItemDao; import com.enonic.cms.web.portal.PortalWebContext; import com.enonic.cms.web.portal.SiteRedirectAndForwardHelper; import com.enonic.cms.web.portal.handler.WebHandlerBase; @Component public final class PageRedirectHandler extends WebHandlerBase { private PortalRenderResponseService portalRenderResponseService; private SiteRedirectAndForwardHelper siteRedirectAndForwardHelper; private MenuItemDao menuItemDao; @Override protected boolean canHandle( final Path localPath ) { return localPath.endsWith( "/page" ); } @Override protected void doHandle( final PortalWebContext context ) throws Exception { final HttpServletRequest httpRequest = context.getRequest(); final HttpServletResponse httpResponse = context.getResponse(); final SitePath sitePath = context.getSitePath(); String id = sitePath.getParam( "id" ); // redirect to new path or forward to old page servlet if ( id == null ) { // site/x/[...]/page shall show the front page SitePath indexPageSitePath = new SitePath( sitePath.getSiteKey(), Path.ROOT, sitePath.getParams() ); siteRedirectAndForwardHelper.forward( httpRequest, httpResponse, indexPageSitePath ); return; } MenuItemKey menuItemKey = new MenuItemKey( id ); MenuItemEntity menuItem = menuItemDao.findByKey( menuItemKey ); if ( menuItem == null ) { throw new ResourceNotFoundException( sitePath.getSiteKey(), sitePath.getLocalPath() ); } SitePath newPagePath = new SitePath( sitePath.getSiteKey(), menuItem.getPath(), sitePath.getParams() ); // Remove id-parameter since this is not valid in the redirect newPagePath.removeParam( "id" ); PortalRequest request = new PortalRequest(); request.setSitePath( newPagePath ); RedirectInstruction redirectInstruction = new RedirectInstruction( newPagePath ); redirectInstruction.setPermanentRedirect( true ); PortalResponse response = PortalResponse.createRedirect( redirectInstruction ); portalRenderResponseService.serveResponse( request, response, httpResponse, httpRequest, null ); } @Autowired public void setPortalRenderResponseService( final PortalRenderResponseService portalRenderResponseService ) { this.portalRenderResponseService = portalRenderResponseService; } @Autowired public void setSiteRedirectAndForwardHelper( final SiteRedirectAndForwardHelper siteRedirectAndForwardHelper ) { this.siteRedirectAndForwardHelper = siteRedirectAndForwardHelper; } @Autowired public void setMenuItemDao( final MenuItemDao menuItemDao ) { this.menuItemDao = menuItemDao; } }