/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.content; import com.enonic.cms.core.portal.cache.PageCache; import com.enonic.cms.core.portal.cache.PageCacheService; import com.enonic.cms.core.structure.menuitem.MenuItemEntity; public class PageCacheInvalidatorForContent { private PageCacheService pageCacheService; public PageCacheInvalidatorForContent( PageCacheService pageCacheService ) { this.pageCacheService = pageCacheService; } public void invalidateForContent( ContentVersionEntity version ) { invalidateForContent( version.getContent() ); } public void invalidateForContent( ContentEntity content ) { ContentLocationSpecification contentLocationSpecification = new ContentLocationSpecification(); contentLocationSpecification.setIncludeInactiveLocationsInSection( false ); ContentLocations contentLocations = content.getLocations( contentLocationSpecification ); invalidateForContentLocations( contentLocations ); } public void invalidateForContentLocations( ContentLocations contentLocations ) { for ( ContentLocation contentLocation : contentLocations.getAllLocations() ) { PageCache pageCache = pageCacheService.getPageCacheService( contentLocation.getSiteKey() ); pageCache.removeEntriesByMenuItem( contentLocation.getMenuItemKey() ); cleanPageCache( contentLocation.getMenuItem().getParent(), pageCache ); } } private void cleanPageCache( MenuItemEntity menuItem, PageCache pageCache ) { if ( menuItem != null ) { if ( menuItem.isRenderable() ) { pageCache.removeEntriesByMenuItem( menuItem.getKey() ); } else { cleanPageCache( menuItem.getParent(), pageCache ); } } } }