Author: toad
Date: 2009-04-23 19:20:41 +0000 (Thu, 23 Apr 2009)
New Revision: 27269

Modified:
   trunk/freenet/src/freenet/support/compress/Compressor.java
Log:
Horrible db4o voodoo to fix NPEs


Modified: trunk/freenet/src/freenet/support/compress/Compressor.java
===================================================================
--- trunk/freenet/src/freenet/support/compress/Compressor.java  2009-04-23 
18:44:11 UTC (rev 27268)
+++ trunk/freenet/src/freenet/support/compress/Compressor.java  2009-04-23 
19:20:41 UTC (rev 27269)
@@ -42,24 +42,56 @@
                }
 
                public Bucket compress(Bucket data, BucketFactory bf, long 
maxReadLength, long maxWriteLength) throws IOException, 
CompressionOutputSizeException {
+                       if(compressor == null) {
+                               // DB4O VOODOO! See below.
+                               if(name != null) return 
getOfficial().compress(data, bf, maxReadLength, maxWriteLength);
+                       }
                        return compressor.compress(data, bf, maxReadLength, 
maxWriteLength);
                }
 
                public Bucket decompress(Bucket data, BucketFactory 
bucketFactory, long maxLength, long maxEstimateSizeLength, Bucket preferred) 
throws IOException, CompressionOutputSizeException {
-                       if(compressor == null)
-                               Logger.error(this, "IMPOSSIBLE: 
compressor="+compressor+" name="+name+" metadataID="+metadataID+" for "+this);
+                       if(compressor == null) {
+                               // DB4O VOODOO! See below.
+                               if(name != null) return 
getOfficial().decompress(data, bucketFactory, maxLength, maxEstimateSizeLength, 
preferred);
+                       }
                        return compressor.decompress(data, bucketFactory, 
maxLength, maxEstimateSizeLength, preferred);
                }
 
                public int decompress(byte[] dbuf, int i, int j, byte[] output) 
throws CompressionOutputSizeException {
+                       if(compressor == null) {
+                               // DB4O VOODOO! See below.
+                               if(name != null) return 
getOfficial().decompress(dbuf, i, j, output);
+                       }
                        return compressor.decompress(dbuf, i, j, output);
                }
                
+               // DB4O VOODOO!
+               // Copies of the static fields get stored into the database.
+               // Really the solution is probably to store the codes only.
+               
+               private Compressor getOfficial() {
+                       if(name.equals("GZIP")) return GZIP;
+                       if(name.equals("BZIP2")) return BZIP2;
+                       if(name.equals("LZMA")) return LZMA;
+                       return null;
+               }
+
                public boolean objectCanDeactivate(ObjectContainer container) {
-                       Logger.error(this, "Tried to deactivate "+this, new 
Exception("error"));
-                       return false;
+                       // Do not deactivate the official COMPRESSOR_TYPE's.
+                       if(isOfficial()) return false;
+                       return true;
                }
                
+               public boolean objectCanActivate(ObjectContainer container) {
+                       // Do not activate the official COMPRESSOR_TYPE's.
+                       if(isOfficial()) return false;
+                       return true;
+               }
+               
+               public boolean isOfficial() {
+                       return this == GZIP || this == BZIP2 || this == LZMA;
+               }
+               
        }
 
        /**

_______________________________________________
cvs mailing list
[email protected]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs

Reply via email to