/* This code is part of Freenet. It is distributed under the GNU General * Public License, version 2 (or at your option any later version). See * http://www.gnu.org/ for further details of the GPL. */ package freenet.client; import freenet.support.api.Bucket; /** * Base class for items stored in the archive cache. */ abstract class ArchiveStoreItem { final ArchiveKey key; final ArchiveStoreContext context; /** Basic constructor. */ ArchiveStoreItem(ArchiveKey key, ArchiveStoreContext context) { this.key = key; this.context = context; } protected void addToContext() { context.addItem(this); } /** Delete any stored data on disk etc. * Override in subtypes for specific cleanup. * Will be called with locks held, so should only do low level operations * such as deletes.. */ void innerClose() { } // override in subtypes for cleanup /** * Shortcut to start the removal/cleanup process. */ final void close() { context.removeItem(this); } /** * Return cached data as a Bucket, or throw an ArchiveFailureException. */ abstract Bucket getDataOrThrow() throws ArchiveFailureException; /** * Return the amount of cache space used by the item. May be called inside * locks so should not take any nontrivial locks or take long. */ abstract long spaceUsed(); /** * Get the data as a Bucket, and guarantee that it won't be freed until the * returned object is either finalized or freed. */ abstract Bucket getReaderBucket() throws ArchiveFailureException; }