package freenet.client; import java.io.Serializable; import freenet.client.ArchiveManager.ARCHIVE_TYPE; import freenet.client.async.ClientContext; import freenet.keys.FreenetURI; import freenet.support.Logger; import freenet.support.api.Bucket; import freenet.support.compress.Compressor.COMPRESSOR_TYPE; class ArchiveHandlerImpl implements ArchiveHandler, Serializable { private static final long serialVersionUID = 1L; private static volatile boolean logMINOR; static { Logger.registerClass(ArchiveHandlerImpl.class); } private final FreenetURI key; private boolean forceRefetchArchive; ARCHIVE_TYPE archiveType; COMPRESSOR_TYPE compressorType; ArchiveHandlerImpl(FreenetURI key, ARCHIVE_TYPE archiveType, COMPRESSOR_TYPE ctype, boolean forceRefetchArchive) { this.key = key; this.archiveType = archiveType; this.compressorType = ctype; this.forceRefetchArchive = forceRefetchArchive; } @Override public Bucket get(String internalName, ArchiveContext archiveContext, ArchiveManager manager) throws ArchiveFailureException, ArchiveRestartException, MetadataParseException, FetchException { if(forceRefetchArchive) return null; Bucket data; // Fetch from cache if(logMINOR) Logger.minor(this, "Checking cache: "+key+ ' ' +internalName); if((data = manager.getCached(key, internalName)) != null) { return data; } return null; } @Override public Bucket getMetadata(ArchiveContext archiveContext, ArchiveManager manager) throws ArchiveFailureException, ArchiveRestartException, MetadataParseException, FetchException { return get(".metadata", archiveContext, manager); } @Override public void extractToCache(Bucket bucket, ArchiveContext actx, String element, ArchiveExtractCallback callback, ArchiveManager manager, ClientContext context) throws ArchiveFailureException, ArchiveRestartException { forceRefetchArchive = false; // now we don't need to force refetch any more ArchiveStoreContext ctx = manager.makeContext(key, archiveType, compressorType, false); manager.extractToCache(key, archiveType, compressorType, bucket, actx, ctx, element, callback, context); } @Override public ARCHIVE_TYPE getArchiveType() { return archiveType; } public COMPRESSOR_TYPE getCompressorType() { return compressorType; } @Override public FreenetURI getKey() { return key; } @Override public ArchiveHandler cloneHandler() { return new ArchiveHandlerImpl(key, archiveType, compressorType, forceRefetchArchive); } }