Author: toad
Date: 2008-06-26 23:36:47 +0000 (Thu, 26 Jun 2008)
New Revision: 20803

Modified:
   branches/db4o/freenet/src/freenet/clients/http/QueueToadlet.java
   branches/db4o/freenet/src/freenet/node/fcp/ClientGet.java
   branches/db4o/freenet/src/freenet/node/fcp/ClientPutBase.java
   branches/db4o/freenet/src/freenet/node/fcp/ClientRequest.java
   branches/db4o/freenet/src/freenet/node/fcp/FCPServer.java
Log:
Prevent activation-related NPEs in rendering queue page

Modified: branches/db4o/freenet/src/freenet/clients/http/QueueToadlet.java
===================================================================
--- branches/db4o/freenet/src/freenet/clients/http/QueueToadlet.java    
2008-06-26 23:27:56 UTC (rev 20802)
+++ branches/db4o/freenet/src/freenet/clients/http/QueueToadlet.java    
2008-06-26 23:36:47 UTC (rev 20803)
@@ -1041,7 +1041,7 @@
                                        }
                                } else if (column == LIST_SIZE) {
                                        if (clientRequest instanceof ClientGet) 
{
-                                               
requestRow.addChild(createSizeCell(((ClientGet) clientRequest).getDataSize(), 
((ClientGet) clientRequest).isTotalFinalized(), advancedModeEnabled));
+                                               
requestRow.addChild(createSizeCell(((ClientGet) 
clientRequest).getDataSize(container), ((ClientGet) 
clientRequest).isTotalFinalized(container), advancedModeEnabled));
                                        } else if (clientRequest instanceof 
ClientPut) {
                                                
requestRow.addChild(createSizeCell(((ClientPut) clientRequest).getDataSize(), 
true, advancedModeEnabled));
                                        }
@@ -1049,7 +1049,7 @@
                                        
requestRow.addChild(createDownloadCell(pageMaker, (ClientGet) clientRequest));
                                } else if (column == LIST_MIME_TYPE) {
                                        if (clientRequest instanceof ClientGet) 
{
-                                               
requestRow.addChild(createTypeCell(((ClientGet) clientRequest).getMIMEType()));
+                                               
requestRow.addChild(createTypeCell(((ClientGet) 
clientRequest).getMIMEType(container)));
                                        } else if (clientRequest instanceof 
ClientPut) {
                                                
requestRow.addChild(createTypeCell(((ClientPut) clientRequest).getMIMEType()));
                                        }
@@ -1076,9 +1076,9 @@
                                } else if (column == LIST_TOTAL_SIZE) {
                                        
requestRow.addChild(createSizeCell(((ClientPutDir) 
clientRequest).getTotalDataSize(), true, advancedModeEnabled));
                                } else if (column == LIST_PROGRESS) {
-                                       
requestRow.addChild(createProgressCell(clientRequest.isStarted(), (int) 
clientRequest.getFetchedBlocks(container), (int) 
clientRequest.getFailedBlocks(container), (int) 
clientRequest.getFatalyFailedBlocks(container), (int) 
clientRequest.getMinBlocks(container), (int) 
clientRequest.getTotalBlocks(container), clientRequest.isTotalFinalized() || 
clientRequest instanceof ClientPut, isUpload));
+                                       
requestRow.addChild(createProgressCell(clientRequest.isStarted(), (int) 
clientRequest.getFetchedBlocks(container), (int) 
clientRequest.getFailedBlocks(container), (int) 
clientRequest.getFatalyFailedBlocks(container), (int) 
clientRequest.getMinBlocks(container), (int) 
clientRequest.getTotalBlocks(container), 
clientRequest.isTotalFinalized(container) || clientRequest instanceof 
ClientPut, isUpload));
                                } else if (column == LIST_REASON) {
-                                       
requestRow.addChild(createReasonCell(clientRequest.getFailureReason()));
+                                       
requestRow.addChild(createReasonCell(clientRequest.getFailureReason(container)));
                                }
                        }
                }
@@ -1242,7 +1242,7 @@
                        FreenetURI uri = ((ClientGet)req).getURI();
                        if(req.isPersistentForever() && uri != null)
                                container.activate(uri, 5);
-                       long size = ((ClientGet)req).getDataSize();
+                       long size = ((ClientGet)req).getDataSize(container);
                        String name = uri.getPreferredFilename();
                        String title = l10n("downloadSucceededTitle", 
"filename", name);
                        HTMLNode text = new HTMLNode("div");

Modified: branches/db4o/freenet/src/freenet/node/fcp/ClientGet.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/fcp/ClientGet.java   2008-06-26 
23:27:56 UTC (rev 20802)
+++ branches/db4o/freenet/src/freenet/node/fcp/ClientGet.java   2008-06-26 
23:36:47 UTC (rev 20803)
@@ -679,19 +679,25 @@
                return uri;
        }

-       public long getDataSize() {
+       public long getDataSize(ObjectContainer container) {
                if(foundDataLength > 0)
                        return foundDataLength;
-               if(getter != null)
+               if(getter != null) {
+                       if(persistenceType == PERSIST_FOREVER)
+                               container.activate(getter, 1);
                        return getter.expectedSize();
+               }
                return -1;
        }

-       public String getMIMEType() {
+       public String getMIMEType(ObjectContainer container) {
                if(foundDataMimeType != null)
                        return foundDataMimeType;
-               if(getter != null)
+               if(getter != null) {
+                       if(persistenceType == PERSIST_FOREVER)
+                               container.activate(getter, 1);
                        return getter.expectedMIME();
+               }
                return null;
        }

@@ -753,9 +759,11 @@
                        return 0;
        }

-       public String getFailureReason() {
+       public String getFailureReason(ObjectContainer container) {
                if(getFailedMessage == null)
                        return null;
+               if(persistenceType == PERSIST_FOREVER)
+                       container.activate(getFailedMessage, 5);
                String s = getFailedMessage.shortCodeDescription;
                if(getFailedMessage.extraDescription != null)
                        s += ": "+getFailedMessage.extraDescription;
@@ -763,10 +771,14 @@
        }


-       public boolean isTotalFinalized() {
+       public boolean isTotalFinalized(ObjectContainer container) {
                if(finished && succeeded) return true;
                if(progressPending == null) return false;
-               else return progressPending.isTotalFinalized();
+               else {
+                       if(persistenceType == PERSIST_FOREVER)
+                               container.activate(progressPending, 1);
+                       return progressPending.isTotalFinalized();
+               }
        }

        /**

Modified: branches/db4o/freenet/src/freenet/node/fcp/ClientPutBase.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/fcp/ClientPutBase.java       
2008-06-26 23:27:56 UTC (rev 20802)
+++ branches/db4o/freenet/src/freenet/node/fcp/ClientPutBase.java       
2008-06-26 23:36:47 UTC (rev 20803)
@@ -447,14 +447,20 @@
                        return -1;
        }

-       public synchronized boolean isTotalFinalized() {
+       public synchronized boolean isTotalFinalized(ObjectContainer container) 
{
                if(!(progressMessage instanceof SimpleProgressMessage)) return 
false;
-               else return 
((SimpleProgressMessage)progressMessage).isTotalFinalized();
+               else {
+                       if(persistenceType == PERSIST_FOREVER)
+                               container.activate(putFailedMessage, 5);
+                       return 
((SimpleProgressMessage)progressMessage).isTotalFinalized();
+               }
        }

-       public synchronized String getFailureReason() {
+       public synchronized String getFailureReason(ObjectContainer container) {
                if(putFailedMessage == null)
                        return null;
+               if(persistenceType == PERSIST_FOREVER)
+                       container.activate(putFailedMessage, 5);
                String s = putFailedMessage.shortCodeDescription;
                if(putFailedMessage.extraDescription != null)
                        s += ": "+putFailedMessage.extraDescription;

Modified: branches/db4o/freenet/src/freenet/node/fcp/ClientRequest.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/fcp/ClientRequest.java       
2008-06-26 23:27:56 UTC (rev 20802)
+++ branches/db4o/freenet/src/freenet/node/fcp/ClientRequest.java       
2008-06-26 23:36:47 UTC (rev 20803)
@@ -287,12 +287,12 @@
        public abstract double getFailedBlocks(ObjectContainer container);
        public abstract double getFatalyFailedBlocks(ObjectContainer container);

-       public abstract String getFailureReason();
+       public abstract String getFailureReason(ObjectContainer container);

        /**
         * Has the total number of blocks to insert been determined yet?
         */
-       public abstract boolean isTotalFinalized();
+       public abstract boolean isTotalFinalized(ObjectContainer container);

        public void onMajorProgress() {
                // Ignore

Modified: branches/db4o/freenet/src/freenet/node/fcp/FCPServer.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/fcp/FCPServer.java   2008-06-26 
23:27:56 UTC (rev 20802)
+++ branches/db4o/freenet/src/freenet/node/fcp/FCPServer.java   2008-06-26 
23:36:47 UTC (rev 20803)
@@ -983,7 +983,7 @@
                ClientGet get = globalRebootClient.getCompletedRequest(key, 
null);
                if(get != null) {
                        // FIXME race condition with free() - arrange 
refcounting for the data to prevent this
-                       return new FetchResult(new 
ClientMetadata(get.getMIMEType()), get.getBucket());
+                       return new FetchResult(new 
ClientMetadata(get.getMIMEType(null)), get.getBucket());
                }

                class OutputWrapper {
@@ -1000,7 +1000,7 @@
                                try {
                                        ClientGet get = 
globalForeverClient.getCompletedRequest(key, container);
                                        if(get != null) {
-                                               result = new FetchResult(new 
ClientMetadata(get.getMIMEType()), get.getBucket());
+                                               result = new FetchResult(new 
ClientMetadata(get.getMIMEType(container)), get.getBucket());
                                        }
                                } finally {
                                        synchronized(ow) {


Reply via email to