Ranides Atterwim 10 år sedan
förälder
incheckning
97ff71cb4f

+ 1 - 0
assira/src/main/java/net/ranides/assira/io/uri/URIFlags.java

@@ -24,6 +24,7 @@ public enum URIFlags {
     FILE        (0x0000_0020),
     TEXT        (0x0000_0040),
     BINARY      (0x0000_0080),
+    SIZE        (0x0000_0100),
     
     ;
     

+ 4 - 0
assira/src/main/java/net/ranides/assira/io/uri/URIHandle.java

@@ -90,6 +90,10 @@ public abstract class URIHandle {
         return system.istream(this);
     }
     
+    public InputStream istream(long offset, long size) throws IOException {
+        return system.istream(this, offset, size);
+    }
+    
     public OutputStream ostream() throws IOException {
         return system.ostream(this);
     }

+ 2 - 0
assira/src/main/java/net/ranides/assira/io/uri/URIHandler.java

@@ -56,6 +56,8 @@ public interface URIHandler {
     
     InputStream istream(URIHandle ustream) throws IOException;
     
+    InputStream istream(URIHandle ustream, long offset, long size) throws IOException;
+    
     OutputStream ostream(URIHandle ustream) throws IOException;
     
     Reader reader(URIHandle ustream) throws IOException;

+ 0 - 8
assira/src/main/java/net/ranides/assira/io/uri/URIResolver.java

@@ -21,14 +21,6 @@ import net.ranides.assira.collection.maps.HashMap;
 public class URIResolver {
     
     public static final URIResolver DEFAULT = new URIResolver(ServiceLoader.load(URIHandler.class));
-//        .register("file", null)
-//        .register("http", null)
-//        .register("https", null)
-//        .register("ftp", null)
-//        .register("smb", null)
-//        .register("jar", null)
-//        .register("res", null)
-//        ;
     
     private final Map<String, URIHandler> handlers;
     

+ 7 - 0
assira/src/main/java/net/ranides/assira/io/uri/impl/CFileHandler.java

@@ -80,6 +80,7 @@ public class CFileHandler implements URIHandler {
         }
         if(attr.isRegularFile()) {
             flags.add(URIFlags.FILE);
+            flags.add(URIFlags.SIZE);
         }
         if(Files.isReadable(ustream.path())) {
             flags.add(URIFlags.READABLE);
@@ -135,6 +136,12 @@ public class CFileHandler implements URIHandler {
     public InputStream istream(URIHandle ustream) throws IOException {
         return Files.newInputStream(ustream.path());
     }
+    
+    @Override
+    public InputStream istream(URIHandle ustream, long offset, long size) throws IOException {
+        // @todo (assira #1) CFileHandler: istream(offset)
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
 
     @Override
     public OutputStream ostream(URIHandle ustream) throws IOException {

+ 12 - 5
assira/src/main/java/net/ranides/assira/io/uri/impl/CHttpHandler.java

@@ -18,7 +18,6 @@ import java.net.HttpURLConnection;
 import java.net.MalformedURLException;
 import java.net.URI;
 import java.net.URL;
-import java.net.URLConnection;
 import java.nio.charset.Charset;
 import java.nio.file.Path;
 import java.time.Instant;
@@ -34,7 +33,6 @@ import net.ranides.assira.io.uri.URIHandle;
 import net.ranides.assira.io.uri.URIHandler;
 import net.ranides.assira.text.Charsets;
 import net.ranides.assira.text.StringTraits;
-import net.ranides.assira.text.StringUtils;
 
 /**
  *
@@ -42,9 +40,9 @@ import net.ranides.assira.text.StringUtils;
  */
 public class CHttpHandler  implements URIHandler {
     
-    private static final CHttpHandler THAT = new CHttpHandler();
+    static final CHttpHandler THAT = new CHttpHandler();
     
-    private static final Pattern RE_CHARSET = Pattern.compile(";[ ]+charset=([^; ]+)");
+    private static final Pattern RE_CHARSET = Pattern.compile(";[ ]*charset=([^; ]+)");
     
     private static final String HTTP_NS = "HTTP: unsupported";
 
@@ -85,7 +83,7 @@ public class CHttpHandler  implements URIHandler {
         try {
             HttpURLConnection c = connect(ustream, "HEAD");
             re.add(URIFlags.READABLE);
-            if(2 == (c.getResponseCode() % 100)) {
+            if(2 == (c.getResponseCode() / 100)) {
                 re.add(URIFlags.EXISTS);
             }
             if(StringTraits.starts(c.getContentType(), "text/")) {
@@ -93,6 +91,9 @@ public class CHttpHandler  implements URIHandler {
             } else {
                 re.add(URIFlags.BINARY);
             }
+            if(c.getContentLengthLong() >= 0) {
+                re.add(URIFlags.SIZE);
+            }
         } catch(IOException cause) {
             // do nothing
         }
@@ -126,6 +127,12 @@ public class CHttpHandler  implements URIHandler {
     public InputStream istream(URIHandle ustream) throws IOException {
         return ((CHttpHandle)ustream).url.openStream();
     }
+    
+    @Override
+    public InputStream istream(URIHandle ustream, long offset, long size) throws IOException {
+        // @todo (assira #1) CFileHandler: istream(offset)
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
 
     @Override
     public OutputStream ostream(URIHandle ustream) throws IOException {

+ 53 - 0
assira/src/test/java/net/ranides/assira/io/uri/impl/CHttpHandlerTest.java

@@ -0,0 +1,53 @@
+/*
+ * @author Ranides Atterwim <ranides@gmail.com>
+ * @copyright Ranides Atterwim
+ * @license WTFPL
+ * @url http://ranides.net/projects/assira
+ */
+package net.ranides.assira.io.uri.impl;
+
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import net.ranides.assira.io.uri.URIHandle;
+import net.ranides.assira.io.uri.URIResolver;
+import net.ranides.assira.io.uri.URITime;
+import net.ranides.assira.text.IOStrings;
+import org.junit.Test;
+
+/**
+ *
+ * @author Ranides Atterwim <ranides@gmail.com>
+ */
+public class CHttpHandlerTest {
+    
+    public CHttpHandlerTest() {
+    }
+
+    @Test
+    public void testSomeMethod() throws IOException, URISyntaxException {
+        URIResolver r = new URIResolver().register(CHttpHandler.THAT);
+        URIHandle h1 = r.resolve("http://maven.ranides.net/net/ranides/assira/");
+        URIHandle h2 = r.resolve("http://maven.ranides.net/net/ranides/assira/maven-metadata.xml");
+        
+        System.out.printf("charset = %s%n", h1.charset());
+        System.out.printf("charset = %s%n", h2.charset());
+        
+        System.out.printf("exists = %s%n", h1.exists());
+        System.out.printf("exists = %s%n", h2.exists());
+        
+        System.out.printf("flags = %s%n", h1.flags());
+        System.out.printf("flags = %s%n", h2.flags());
+        
+        System.out.printf("reader = %s%n", IOStrings.read(h1.reader()).length());
+        System.out.printf("reader = %s%n", IOStrings.read(h2.reader()).length());
+        
+        System.out.printf("time = %s%n", h1.time(URITime.MODIFIED));
+        System.out.printf("time = %s%n", h2.time(URITime.MODIFIED));
+        
+        System.out.printf("size = %s%n", h1.size());
+        System.out.printf("size = %s%n", h2.size());
+        
+    }
+    
+}