/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.localization; import com.enonic.cms.framework.cache.CacheFacade; import com.enonic.cms.core.resource.ResourceBase; import com.enonic.cms.core.resource.ResourceKey; import com.enonic.cms.core.resource.ResourceService; final class LocalizationPropertiesCache { private final CacheFacade cacheFacade; private final ResourceService resourceService; private final long checkInterval; public LocalizationPropertiesCache( final CacheFacade cacheFacade, final ResourceService resourceService, final long checkInterval ) { this.cacheFacade = cacheFacade; this.resourceService = resourceService; this.checkInterval = checkInterval; } public LocalizationPropertiesCacheEntry get( final ResourceKey key ) { final LocalizationPropertiesCacheEntry entry = (LocalizationPropertiesCacheEntry) this.cacheFacade.get( null, key.toString() ); if ( entry == null ) { return null; } if ( isValid( entry ) ) { return entry; } this.cacheFacade.remove( null, key.toString() ); return null; } public void put( final LocalizationPropertiesCacheEntry entry ) { this.cacheFacade.put( null, entry.getKey().toString(), entry ); } public boolean isValid( final LocalizationPropertiesCacheEntry entry ) { final long now = System.currentTimeMillis(); if ( ( now - entry.getLastValidated() ) < this.checkInterval ) { return true; } entry.setLastValidated( now ); return !isModifiedAfter( entry.getKey(), entry.getTimestamp() ); } private boolean isModifiedAfter( final ResourceKey key, final long timestamp ) { final ResourceBase resource = this.resourceService.getResource( key ); return ( resource == null ) || ( resource.getLastModified().getTimeInMillis() > timestamp ); } }