Author: michiel
Date: 2010-07-02 08:48:46 +0200 (Fri, 02 Jul 2010)
New Revision: 42789

Modified:
   
mmbase/trunk/applications/resources/src/main/java/org/mmbase/servlet/FileServlet.java
   
mmbase/trunk/applications/resources/src/test/java/org/mmbase/servlet/FileServletTest.java
Log:
details

Modified: 
mmbase/trunk/applications/resources/src/main/java/org/mmbase/servlet/FileServlet.java
===================================================================
--- 
mmbase/trunk/applications/resources/src/main/java/org/mmbase/servlet/FileServlet.java
       2010-07-02 06:16:04 UTC (rev 42788)
+++ 
mmbase/trunk/applications/resources/src/main/java/org/mmbase/servlet/FileServlet.java
       2010-07-02 06:48:46 UTC (rev 42789)
@@ -34,7 +34,7 @@
  * @see    AttachmentServlet
  */
 public class FileServlet extends BridgeServlet {
-    private static Logger log;
+    private static Logger log = Logging.getLoggerInstance(FileServlet.class);
 
     private static final UrlEscaper URL = new UrlEscaper();
     private static final String SESSION_EXTENSION  = ".SESSION";
@@ -76,9 +76,7 @@
     @Override
     public void setMMBase(MMBase mmb) {
         super.setMMBase(mmb);
-        if (log == null) {
-            log = Logging.getLoggerInstance(FileServlet.class);
-        }
+        log = Logging.getLoggerInstance(FileServlet.class);
         if (files == null) {
             File dataDir = MMBase.getMMBase().getDataDir();
 
@@ -356,8 +354,13 @@
             String[] fl = parse.split("-", 2);
             String firstString = fl[0].trim();
             String lastString = fl[1].trim();
-            first = firstString.length() > 0 ? Long.parseLong(firstString) : 
0L;
-            last  = Math.min(max, lastString.length() > 0 ? 
Long.parseLong(lastString) : Long.MAX_VALUE);
+            if (firstString.length() == 0) {
+                first  = max - Long.parseLong(lastString);
+                last   = max - 1;
+            } else {
+                first = Long.parseLong(firstString);
+                last  = Math.min(max - 1, lastString.length() > 0 ? 
Long.parseLong(lastString) : Long.MAX_VALUE);
+            }
             this.max = max;
         }
         public long available(long i) {
@@ -483,24 +486,16 @@
             long pos = 0;
             while (pos < range.max) {
                 long available = range.available(pos);
+                if (log.isTraceEnabled()) {
+                    log.trace("streaming " + available);
+                }
                 while(available > 0L) {
-                    if (log.isTraceEnabled()) {
-                        log.trace("streaming " + available);
-                    }
                     int b = in.read(buf, 0, (int) Math.min(available, 1024L));
-                    if (b > 0) {
-                        out.write(buf, 0, b);
-                        pos += b;
-                        available -= b;
-                    } else {
-                        //log.warn(" buf " + b);
-                        available = 0;
-                    }
+                    out.write(buf, 0, b);
+                    pos += b;
+                    available -= b;
                 }
                 long notavailable = range.notavailable(pos);
-                if (log.isTraceEnabled()) {
-                    log.trace("skipping " + notavailable);
-                }
                 if (notavailable > 0L) {
                     in.skip(notavailable);
                     pos += notavailable;

Modified: 
mmbase/trunk/applications/resources/src/test/java/org/mmbase/servlet/FileServletTest.java
===================================================================
--- 
mmbase/trunk/applications/resources/src/test/java/org/mmbase/servlet/FileServletTest.java
   2010-07-02 06:16:04 UTC (rev 42788)
+++ 
mmbase/trunk/applications/resources/src/test/java/org/mmbase/servlet/FileServletTest.java
   2010-07-02 06:48:46 UTC (rev 42789)
@@ -37,6 +37,9 @@
         assertEquals(500, new ChainedRange("0-100,101-499", 
10000).available(0));
         assertEquals(0,   new ChainedRange("0-100,101-999", 
10000).notavailable(0));
         assertEquals(500, new ChainedRange("0-200,101-499", 
10000).available(0));
+        assertEquals(0, new ChainedRange("-500", 10000).available(0));
+        assertEquals(9500, new ChainedRange("-500", 10000).notavailable(0));
+        assertEquals(500, new ChainedRange("-500", 10000).available(9500));
     }
     @Test
     public void testRangeLength() {
@@ -51,7 +54,7 @@
         File outFile = File.createTempFile(FileServletTest.class.getName(), 
null);
         //System.out.println("" + outFile);
         OutputStream out = new FileOutputStream(outFile);
-        FileServlet.stream(null, in, out);
+        FileServlet.stream(range, in, out);
         assertTrue(FileUtils.contentEquals(file, outFile));
     }
 
@@ -65,12 +68,11 @@
     public void streamRange() throws Exception {
         File file = new File("src" + File.separator + "test" + File.separator 
+ "images" + File.separator + "test.png");
         {
-            ChainedRange range = new ChainedRange("0-100,101-499,500-", 
file.length());
+            ChainedRange range = new ChainedRange("0-100,101-499,500-" + 
file.length(), file.length());
             stream(range);
         }
         {
-            ChainedRange range = new ChainedRange("" + (file.length() - 2000) 
+ "-", file.length());
-            System.out.println("" + range);
+            ChainedRange range = new ChainedRange("0-100,101-499,500-", 
file.length());
             stream(range);
         }
     }

_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to