001 package com.croftsoft.core.util.cache; 002 003 import java.io.*; 004 005 import com.croftsoft.core.util.id.Id; 006 007 /********************************************************************* 008 * Stores the content and then returns an Id which may be used to 009 * read the content later, if still available. 010 * 011 * @see 012 * SoftCache 013 * 014 * @version 015 * 2003-06-07 016 * @since 017 * 1999-04-24 018 * @author 019 * <a href="https://www.croftsoft.com/">David Wallace Croft</a> 020 *********************************************************************/ 021 022 public interface Cache 023 ////////////////////////////////////////////////////////////////////// 024 ////////////////////////////////////////////////////////////////////// 025 { 026 027 /********************************************************************* 028 * 029 * "Validates" the content by 030 * 031 * <OL> 032 * 033 * <LI> confirming that identical content already exists in the cache; 034 * or, if otherwise necessary, 035 * 036 * <LI> storing a new copy of the content in the cache. 037 * 038 * </OL> 039 * 040 * @param id 041 * 042 * The content identifier passed to isAvailable() to determine if 043 * the content is already valid. The parameter may be any Id 044 * object that potentially matches via the equals() method. 045 * 046 * @param contentAccessor 047 * 048 * An object capable of making content accessible via an InputStream. 049 * For example, a ContentAccessor might retrieve content from a 050 * website via a URL, a database or file storage, a remote object 051 * such as another cache, or even dynamically generate the content 052 * upon demand. As yet another possibility, a ContentAccessor object 053 * may potentially attempt to access the content from several 054 * different sources sequentially until it is successful. 055 * 056 * @return 057 * 058 * Returns an Id object for the validated content which may be 059 * used later for retrieval. 060 * 061 * <P> 062 * 063 * If valid content was already available in the cache, the returned 064 * Id object will be the id parameter. 065 * 066 * <P> 067 * 068 * If valid content was not already available and the content could 069 * not be accessed and stored via the contentAccessor, the returned 070 * value will be null. 071 * 072 * <P> 073 * 074 * If valid content was not already available and the content could 075 * be accessed and stored via the contentAccessor, the returned 076 * value will be a new Id object with values that may or may 077 * not equal that of the id object parameter, depending on 078 * the actual content available via the contentAccessor. 079 * 080 *********************************************************************/ 081 public Id validate ( Id id, ContentAccessor contentAccessor ) 082 throws IOException; 083 084 /********************************************************************* 085 * Stores the contents and returns an Id to be used for retrieval. 086 * 087 * <P> 088 * 089 * Reads the stream until completion and closes it before return. 090 * 091 * @return 092 * Returns an Id to be used for later retrieval. 093 * Returns null if the storage was unsuccessful. 094 *********************************************************************/ 095 public Id store ( InputStream in ) throws IOException; 096 097 /********************************************************************* 098 * Retrieves the content associated with this Id. 099 * 100 * @param id 101 * Returns the content associated with this id or its equivalent. 102 * @return 103 * May return null. 104 *********************************************************************/ 105 public InputStream retrieve ( Id id ) throws IOException; 106 107 /********************************************************************* 108 * Returns false if the content is no longer available. 109 * 110 * @param id 111 * An Id object to be used to retrieve the content. 112 *********************************************************************/ 113 public boolean isAvailable ( Id id ); 114 115 ////////////////////////////////////////////////////////////////////// 116 ////////////////////////////////////////////////////////////////////// 117 }