Author: toad
Date: 2008-12-19 19:48:00 +0000 (Fri, 19 Dec 2008)
New Revision: 24635
Modified:
branches/db4o/freenet/src/freenet/client/ArchiveHandler.java
branches/db4o/freenet/src/freenet/client/ArchiveHandlerImpl.java
branches/db4o/freenet/src/freenet/client/ArchiveManager.java
branches/db4o/freenet/src/freenet/client/async/SingleFileFetcher.java
branches/db4o/freenet/src/freenet/keys/FreenetURI.java
Log:
Remove the archive handler. Always copy it. Copy the URIs too.
Modified: branches/db4o/freenet/src/freenet/client/ArchiveHandler.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/ArchiveHandler.java
2008-12-19 19:32:49 UTC (rev 24634)
+++ branches/db4o/freenet/src/freenet/client/ArchiveHandler.java
2008-12-19 19:48:00 UTC (rev 24635)
@@ -91,5 +91,9 @@
public abstract void extractPersistentOffThread(Bucket bucket,
ArchiveContext actx, String element, ArchiveExtractCallback callback,
ObjectContainer container, ClientContext context);
public abstract void activateForExecution(ObjectContainer container);
+
+ public abstract ArchiveHandler cloneHandler();
+
+ public abstract void removeFrom(ObjectContainer container);
}
\ No newline at end of file
Modified: branches/db4o/freenet/src/freenet/client/ArchiveHandlerImpl.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/ArchiveHandlerImpl.java
2008-12-19 19:32:49 UTC (rev 24634)
+++ branches/db4o/freenet/src/freenet/client/ArchiveHandlerImpl.java
2008-12-19 19:48:00 UTC (rev 24635)
@@ -225,6 +225,15 @@
container.activate(this, 1);
container.activate(key, 5);
}
+
+ public ArchiveHandler cloneHandler() {
+ return new ArchiveHandlerImpl(key.cloneKey(), archiveType,
compressorType, forceRefetchArchive);
+ }
+
+ public void removeFrom(ObjectContainer container) {
+ key.removeFrom(container);
+ container.delete(this);
+ }
}
Modified: branches/db4o/freenet/src/freenet/client/ArchiveManager.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/ArchiveManager.java
2008-12-19 19:32:49 UTC (rev 24634)
+++ branches/db4o/freenet/src/freenet/client/ArchiveManager.java
2008-12-19 19:48:00 UTC (rev 24635)
@@ -189,8 +189,8 @@
* @param archiveType The archive type, defined in Metadata.
* @return An archive handler.
*/
- public ArchiveHandler makeHandler(FreenetURI key, ARCHIVE_TYPE
archiveType, COMPRESSOR_TYPE ctype, boolean forceRefetch) {
- return new ArchiveHandlerImpl(key, archiveType, ctype,
forceRefetch);
+ public ArchiveHandler makeHandler(FreenetURI key, ARCHIVE_TYPE
archiveType, COMPRESSOR_TYPE ctype, boolean forceRefetch, boolean persistent) {
+ return new ArchiveHandlerImpl(persistent ? key.cloneKey() :
key, archiveType, ctype, forceRefetch);
}
/**
Modified: branches/db4o/freenet/src/freenet/client/async/SingleFileFetcher.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SingleFileFetcher.java
2008-12-19 19:32:49 UTC (rev 24634)
+++ branches/db4o/freenet/src/freenet/client/async/SingleFileFetcher.java
2008-12-19 19:48:00 UTC (rev 24635)
@@ -78,6 +78,7 @@
this.returnBucket = returnBucket;
this.dontTellClientGet = dontTellClientGet;
this.ah = ah;
+ if(persistent && ah != null) ah = ah.cloneHandler();
this.archiveMetadata = archiveMetadata;
//this.uri = uri;
//this.key = ClientKey.getBaseKey(uri);
@@ -111,6 +112,7 @@
this.dontTellClientGet = fetcher.dontTellClientGet;
this.actx = fetcher.actx;
this.ah = fetcher.ah;
+ if(persistent && ah != null) ah = ah.cloneHandler();
this.archiveMetadata = fetcher.archiveMetadata;
this.clientMetadata = (fetcher.clientMetadata != null ?
(ClientMetadata) fetcher.clientMetadata.clone() : null);
this.metadata = newMeta;
@@ -340,7 +342,7 @@
// the case of binary blobs.
if(ah == null || !ah.getKey().equals(thisKey))
ah =
context.archiveManager.makeHandler(thisKey, metadata.getArchiveType(),
metadata.getCompressionCodec(),
- (parent instanceof
ClientGetter ? ((ClientGetter)parent).collectingBinaryBlob() : false));
+ (parent instanceof
ClientGetter ? ((ClientGetter)parent).collectingBinaryBlob() : false),
persistent);
archiveMetadata = metadata;
// ah is set. This means we are currently
handling an archive.
Bucket metadataBucket;
@@ -1076,6 +1078,7 @@
uri.removeFrom(container);
if(thisKey != null)
thisKey.removeFrom(container);
+ ah.removeFrom(container);
// FIXME what to do about metaStrings ??
// FIXME what to do about clientMetadata ??
// actx is global to the ClientRequest
Modified: branches/db4o/freenet/src/freenet/keys/FreenetURI.java
===================================================================
--- branches/db4o/freenet/src/freenet/keys/FreenetURI.java 2008-12-19
19:32:49 UTC (rev 24634)
+++ branches/db4o/freenet/src/freenet/keys/FreenetURI.java 2008-12-19
19:48:00 UTC (rev 24635)
@@ -13,7 +13,6 @@
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.LinkedList;
import java.util.List;
import java.util.StringTokenizer;
@@ -889,4 +888,8 @@
return new FreenetURI("USK", siteName, metaStr, routingKey,
cryptoKey, extra, edition);
}
+
+ public FreenetURI cloneKey() {
+ return new FreenetURI(this);
+ }
}
\ No newline at end of file
_______________________________________________
cvs mailing list
[email protected]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs