13713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick/* 23713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * Copyright (C) 2011 The Android Open Source Project 33713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * 43713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * Licensed under the Apache License, Version 2.0 (the "License"); 53713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * you may not use this file except in compliance with the License. 63713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * You may obtain a copy of the License at 73713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * 83713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * http://www.apache.org/licenses/LICENSE-2.0 93713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * 103713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * Unless required by applicable law or agreed to in writing, software 113713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * distributed under the License is distributed on an "AS IS" BASIS, 123713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * See the License for the specific language governing permissions and 143713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * limitations under the License. 153713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick */ 163713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick 173713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrickpackage com.android.volley; 183713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick 193713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick/** 203713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * An interface for a cache keyed by a String with a byte array as data. 213713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick */ 223713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrickpublic interface Cache { 233713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick /** 243713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * Retrieves an entry from the cache. 253713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * @param key Cache key 263713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * @return An {@link Entry} or null in the event of a cache miss 273713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick */ 283713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick public Entry get(String key); 293713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick 303713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick /** 313713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * Adds or replaces an entry to the cache. 323713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * @param key Cache key 333713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * @param entry Data to store and metadata for cache coherency, TTL, etc. 343713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick */ 353713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick public void put(String key, Entry entry); 363713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick 373713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick /** 383713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * Performs any potentially long-running actions needed to initialize the cache; 393713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * will be called from a worker thread. 403713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick */ 413713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick public void initialize(); 423713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick 433713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick /** 443713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * Invalidates an entry in the cache. 453713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * @param key Cache key 463713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * @param fullExpire True to fully expire the entry, false to soft expire 473713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick */ 483713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick public void invalidate(String key, boolean fullExpire); 493713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick 503713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick /** 513713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * Removes an entry from the cache. 523713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * @param key Cache key 533713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick */ 543713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick public void remove(String key); 553713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick 563713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick /** 573713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * Empties the cache. 583713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick */ 593713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick public void clear(); 603713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick 613713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick /** 623713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * Data and metadata for an entry returned by the cache. 633713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick */ 643713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick public static class Entry { 653713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick /** The data returned from cache. */ 663713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick public byte[] data; 673713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick 683713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick /** ETag for cache coherency. */ 693713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick public String etag; 703713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick 713713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick /** Date of this response as reported by the server. */ 723713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick public long serverDate; 733713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick 743713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick /** TTL for this record. */ 753713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick public long ttl; 763713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick 773713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick /** Soft TTL for this record. */ 783713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick public long softTtl; 793713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick 803713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick /** True if the entry is expired. */ 813713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick public boolean isExpired() { 823713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick return this.ttl < System.currentTimeMillis(); 833713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick } 843713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick 853713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick /** True if a refresh is needed from the original data source. */ 863713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick public boolean refreshNeeded() { 873713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick return this.softTtl < System.currentTimeMillis(); 883713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick } 893713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick } 903713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick 913713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick} 92