Author: toad
Date: 2008-06-28 18:37:28 +0000 (Sat, 28 Jun 2008)
New Revision: 20856

Modified:
   
branches/db4o/freenet/src/freenet/client/async/MultiPutCompletionCallback.java
   branches/db4o/freenet/src/freenet/client/async/SimpleManifestPutter.java
   branches/db4o/freenet/src/freenet/client/async/SingleFileFetcher.java
   branches/db4o/freenet/src/freenet/client/async/SplitFileFetcher.java
   branches/db4o/freenet/src/freenet/keys/FreenetURI.java
Log:
Eliminate LinkedList from any class that might be persisted.
We don't want it, it will cause problems with activation.

Modified: 
branches/db4o/freenet/src/freenet/client/async/MultiPutCompletionCallback.java
===================================================================
--- 
branches/db4o/freenet/src/freenet/client/async/MultiPutCompletionCallback.java  
    2008-06-28 18:18:05 UTC (rev 20855)
+++ 
branches/db4o/freenet/src/freenet/client/async/MultiPutCompletionCallback.java  
    2008-06-28 18:37:28 UTC (rev 20856)
@@ -12,7 +12,7 @@

 public class MultiPutCompletionCallback implements PutCompletionCallback, 
ClientPutState {

-       // LinkedList's rather than HashSet's for memory reasons.
+       // Vector's rather than HashSet's for memory reasons.
        // This class will not be used with large sets, so O(n) is cheaper than 
O(1) -
        // at least it is on memory!
        private final Vector waitingFor;

Modified: 
branches/db4o/freenet/src/freenet/client/async/SimpleManifestPutter.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SimpleManifestPutter.java    
2008-06-28 18:18:05 UTC (rev 20855)
+++ branches/db4o/freenet/src/freenet/client/async/SimpleManifestPutter.java    
2008-06-28 18:37:28 UTC (rev 20856)
@@ -6,7 +6,6 @@
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
-import java.util.LinkedList;
 import java.util.Vector;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipException;
@@ -257,7 +256,7 @@
        private final static String[] defaultDefaultNames =
                new String[] { "index.html", "index.htm", "default.html", 
"default.htm" };
        private int bytesOnZip;
-       private LinkedList elementsToPutInZip;
+       private Vector elementsToPutInZip;
        private boolean fetchable;
        private final boolean earlyEncode;

@@ -279,7 +278,7 @@
                waitingForBlockSets = new HashSet();
                metadataPuttersByMetadata = new HashMap();
                metadataPuttersUnfetchable = new HashMap();
-               elementsToPutInZip = new LinkedList();
+               elementsToPutInZip = new Vector();
                makePutHandlers(manifestElements, putHandlersByName);
                checkZips();
        }
@@ -364,7 +363,7 @@
                                                bytesOnZip += sz;
                                                // Put it in the zip.
                                                ph = new PutHandler(this, name, 
ZipPrefix+element.fullName, cm, data);
-                                               elementsToPutInZip.addLast(ph);
+                                               elementsToPutInZip.add(ph);
                                                numberOfFiles++;
                                                totalSize += data.size();
                                        } else {

Modified: branches/db4o/freenet/src/freenet/client/async/SingleFileFetcher.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SingleFileFetcher.java       
2008-06-28 18:18:05 UTC (rev 20855)
+++ branches/db4o/freenet/src/freenet/client/async/SingleFileFetcher.java       
2008-06-28 18:37:28 UTC (rev 20856)
@@ -5,7 +5,9 @@

 import java.io.IOException;
 import java.net.MalformedURLException;
+import java.util.ArrayList;
 import java.util.LinkedList;
+import java.util.List;

 import com.db4o.ObjectContainer;

@@ -40,7 +42,7 @@
        /** Original URI */
        final FreenetURI uri;
        /** Meta-strings. (Path elements that aren't part of a key type) */
-       final LinkedList metaStrings;
+       private final ArrayList metaStrings;
        /** Number of metaStrings which were added by redirects etc. They are 
added to the start, so this is decremented
         * when we consume one. */
        private int addedMetaStrings;
@@ -53,7 +55,7 @@
        private int recursionLevel;
        /** The URI of the currently-being-processed data, for archives etc. */
        private FreenetURI thisKey;
-       private final LinkedList decompressors;
+       private final ArrayList decompressors;
        private final boolean dontTellClientGet;
        private final Bucket returnBucket;
        /** If true, success/failure is immediately reported to the client, and 
therefore we can check TOO_MANY_PATH_COMPONENTS. */
@@ -64,7 +66,7 @@
         * FIXME: Many times where this is called internally we might be better 
off using a copy constructor? 
         */
        public SingleFileFetcher(ClientRequester parent, GetCompletionCallback 
cb, ClientMetadata metadata,
-                       ClientKey key, LinkedList metaStrings, FreenetURI 
origURI, int addedMetaStrings, FetchContext ctx,
+                       ClientKey key, List metaStrings, FreenetURI origURI, 
int addedMetaStrings, FetchContext ctx,
                        ArchiveContext actx, ArchiveHandler ah, Metadata 
archiveMetadata, int maxRetries, int recursionLevel,
                        boolean dontTellClientGet, long l, boolean isEssential,
                        Bucket returnBucket, boolean isFinal, ObjectContainer 
container, ClientContext context) throws FetchException {
@@ -80,7 +82,10 @@
                //this.uri = uri;
                //this.key = ClientKey.getBaseKey(uri);
                //metaStrings = uri.listMetaStrings();
-               this.metaStrings = metaStrings;
+               if(metaStrings instanceof ArrayList)
+                       this.metaStrings = (ArrayList)metaStrings;
+               else
+                       this.metaStrings = new ArrayList(metaStrings);
                this.addedMetaStrings = addedMetaStrings;
                this.clientMetadata = metadata;
                thisKey = key.getURI();
@@ -89,7 +94,7 @@
                this.recursionLevel = recursionLevel + 1;
                if(recursionLevel > ctx.maxRecursionLevel)
                        throw new 
FetchException(FetchException.TOO_MUCH_RECURSION, "Too much recursion: 
"+recursionLevel+" > "+ctx.maxRecursionLevel);
-               this.decompressors = new LinkedList();
+               this.decompressors = new ArrayList();
        }

        /** Copy constructor, modifies a few given fields, don't call 
schedule().
@@ -109,7 +114,7 @@
                this.archiveMetadata = fetcher.archiveMetadata;
                this.clientMetadata = (ClientMetadata) 
fetcher.clientMetadata.clone();
                this.metadata = newMeta;
-               this.metaStrings = new LinkedList();
+               this.metaStrings = new ArrayList();
                this.addedMetaStrings = 0;
                this.recursionLevel = fetcher.recursionLevel + 1;
                if(recursionLevel > ctx.maxRecursionLevel)
@@ -194,7 +199,7 @@
                if(!decompressors.isEmpty()) {
                        Bucket data = result.asBucket();
                        while(!decompressors.isEmpty()) {
-                               Compressor c = (Compressor) 
decompressors.removeLast();
+                               Compressor c = (Compressor) 
decompressors.remove(decompressors.size()-1);
                                try {
                                        long maxLen = 
Math.max(ctx.maxTempLength, ctx.maxOutputLength);
                                        data = c.decompress(data, 
context.getBucketFactory(parent.persistent()), maxLen, maxLen * 4, 
decompressors.isEmpty() ? returnBucket : null);
@@ -491,12 +496,12 @@
                                } catch (MalformedURLException e) {
                                        throw new 
FetchException(FetchException.INVALID_URI, e);
                                }
-                               LinkedList newMetaStrings = 
newURI.listMetaStrings();
+                               ArrayList newMetaStrings = 
newURI.listMetaStrings();

                                // Move any new meta strings to beginning of 
our list of remaining meta strings
                                while(!newMetaStrings.isEmpty()) {
-                                       Object o = newMetaStrings.removeLast();
-                                       metaStrings.addFirst(o);
+                                       Object o = 
newMetaStrings.remove(newMetaStrings.size()-1);
+                                       metaStrings.add(0, o);
                                        addedMetaStrings++;
                                }

@@ -604,13 +609,13 @@
        }

        private String removeMetaString() {
-               String name = (String) metaStrings.removeFirst();
+               String name = (String) metaStrings.remove(0);
                if(addedMetaStrings > 0) addedMetaStrings--;
                return name;
        }

        private void addDecompressor(Compressor codec) {
-               decompressors.addLast(codec);
+               decompressors.add(codec);
        }

        private void fetchArchive(boolean forData, Metadata meta, String 
element, ArchiveExtractCallback callback, final ObjectContainer container, 
ClientContext context) throws FetchException, MetadataParseException, 
ArchiveFailureException, ArchiveRestartException {
@@ -824,13 +829,13 @@
                                returnBucket == null && key instanceof 
ClientKey)
                        return new SimpleSingleFileFetcher((ClientKey)key, 
maxRetries, ctx, requester, cb, isEssential, false, l, container, context);
                if(key instanceof ClientKey)
-                       return new SingleFileFetcher(requester, cb, 
clientMetadata, (ClientKey)key, uri.listMetaStrings(), uri, 0, ctx, actx, null, 
null, maxRetries, recursionLevel, dontTellClientGet, l, isEssential, 
returnBucket, isFinal, container, context);
+                       return new SingleFileFetcher(requester, cb, 
clientMetadata, (ClientKey)key, new ArrayList(uri.listMetaStrings()), uri, 0, 
ctx, actx, null, null, maxRetries, recursionLevel, dontTellClientGet, l, 
isEssential, returnBucket, isFinal, container, context);
                else {
-                       return uskCreate(requester, cb, clientMetadata, 
(USK)key, uri.listMetaStrings(), ctx, actx, maxRetries, recursionLevel, 
dontTellClientGet, l, isEssential, returnBucket, isFinal, container, context);
+                       return uskCreate(requester, cb, clientMetadata, 
(USK)key, new ArrayList(uri.listMetaStrings()), ctx, actx, maxRetries, 
recursionLevel, dontTellClientGet, l, isEssential, returnBucket, isFinal, 
container, context);
                }
        }

-       private static ClientGetState uskCreate(ClientRequester requester, 
GetCompletionCallback cb, ClientMetadata clientMetadata, USK usk, LinkedList 
metaStrings, FetchContext ctx, ArchiveContext actx, int maxRetries, int 
recursionLevel, boolean dontTellClientGet, long l, boolean isEssential, Bucket 
returnBucket, boolean isFinal, ObjectContainer container, ClientContext 
context) throws FetchException {
+       private static ClientGetState uskCreate(ClientRequester requester, 
GetCompletionCallback cb, ClientMetadata clientMetadata, USK usk, ArrayList 
metaStrings, FetchContext ctx, ArchiveContext actx, int maxRetries, int 
recursionLevel, boolean dontTellClientGet, long l, boolean isEssential, Bucket 
returnBucket, boolean isFinal, ObjectContainer container, ClientContext 
context) throws FetchException {
                if(usk.suggestedEdition >= 0) {
                        // Return the latest known version but at least 
suggestedEdition.
                        long edition = context.uskManager.lookup(usk);
@@ -874,7 +879,7 @@
                final GetCompletionCallback cb;
                final ClientMetadata clientMetadata;
                final USK usk;
-               final LinkedList metaStrings;
+               final ArrayList metaStrings;
                final FetchContext ctx;
                final ArchiveContext actx;
                final int maxRetries;
@@ -884,7 +889,7 @@
                final Bucket returnBucket;
                final boolean persistent;

-               public MyUSKFetcherCallback(ClientRequester requester, 
GetCompletionCallback cb, ClientMetadata clientMetadata, USK usk, LinkedList 
metaStrings, FetchContext ctx, ArchiveContext actx, int maxRetries, int 
recursionLevel, boolean dontTellClientGet, long l, Bucket returnBucket, boolean 
persistent) {
+               public MyUSKFetcherCallback(ClientRequester requester, 
GetCompletionCallback cb, ClientMetadata clientMetadata, USK usk, ArrayList 
metaStrings, FetchContext ctx, ArchiveContext actx, int maxRetries, int 
recursionLevel, boolean dontTellClientGet, long l, Bucket returnBucket, boolean 
persistent) {
                        this.parent = requester;
                        this.cb = cb;
                        this.clientMetadata = clientMetadata;

Modified: branches/db4o/freenet/src/freenet/client/async/SplitFileFetcher.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SplitFileFetcher.java        
2008-06-28 18:18:05 UTC (rev 20855)
+++ branches/db4o/freenet/src/freenet/client/async/SplitFileFetcher.java        
2008-06-28 18:37:28 UTC (rev 20856)
@@ -5,7 +5,7 @@

 import java.io.IOException;
 import java.io.OutputStream;
-import java.util.LinkedList;
+import java.util.ArrayList;

 import com.db4o.ObjectContainer;

@@ -34,7 +34,7 @@

        final FetchContext fetchContext;
        final ArchiveContext archiveContext;
-       final LinkedList decompressors;
+       final ArrayList decompressors;
        final ClientMetadata clientMetadata;
        final ClientRequester parent;
        final GetCompletionCallback cb;
@@ -62,14 +62,14 @@
        final boolean persistent;

        public SplitFileFetcher(Metadata metadata, GetCompletionCallback rcb, 
ClientRequester parent2,
-                       FetchContext newCtx, LinkedList decompressors, 
ClientMetadata clientMetadata, 
+                       FetchContext newCtx, ArrayList decompressors2, 
ClientMetadata clientMetadata, 
                        ArchiveContext actx, int recursionLevel, Bucket 
returnBucket, long token2, ObjectContainer container) throws FetchException, 
MetadataParseException {
                this.persistent = parent2.persistent();
                this.finished = false;
                this.returnBucket = returnBucket;
                this.fetchContext = newCtx;
                this.archiveContext = actx;
-               this.decompressors = decompressors;
+               this.decompressors = decompressors2;
                this.clientMetadata = clientMetadata;
                this.cb = rcb;
                this.recursionLevel = recursionLevel + 1;
@@ -297,7 +297,7 @@
                                container.activate(fetchContext, 1);
                        }
                        while(!decompressors.isEmpty()) {
-                               Compressor c = (Compressor) 
decompressors.removeLast();
+                               Compressor c = (Compressor) 
decompressors.remove(decompressors.size()-1);
                                long maxLen = 
Math.max(fetchContext.maxTempLength, fetchContext.maxOutputLength);
                                try {
                                        Bucket out = returnBucket;

Modified: branches/db4o/freenet/src/freenet/keys/FreenetURI.java
===================================================================
--- branches/db4o/freenet/src/freenet/keys/FreenetURI.java      2008-06-28 
18:18:05 UTC (rev 20855)
+++ branches/db4o/freenet/src/freenet/keys/FreenetURI.java      2008-06-28 
18:37:28 UTC (rev 20856)
@@ -11,8 +11,10 @@
 import java.net.MalformedURLException;
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.LinkedList;
+import java.util.List;
 import java.util.StringTokenizer;
 import java.util.Vector;

@@ -501,7 +503,7 @@
                }
        }

-       public FreenetURI addMetaStrings(LinkedList metaStrings) {
+       public FreenetURI addMetaStrings(List metaStrings) {
                return addMetaStrings((String[]) metaStrings.toArray(new 
String[metaStrings.size()]));
        }

@@ -608,11 +610,11 @@
                return extra;
        }

-       public LinkedList listMetaStrings() {
-               LinkedList l = new LinkedList();
+       public ArrayList listMetaStrings() {
+               ArrayList l = new ArrayList(metaStr.length);
                if(metaStr != null)
                        for(int i = 0; i < metaStr.length; i++)
-                               l.addLast(metaStr[i]);
+                               l.add(metaStr[i]);
                return l;
        }
        static final byte CHK = 1;


Reply via email to