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

Reply via email to