diff src/luan/lib/IoLib.java @ 143:fcb81fa2df0d

handle urls and java resources as files git-svn-id: https://luan-java.googlecode.com/svn/trunk@144 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Fri, 13 Jun 2014 19:04:05 +0000
parents 05f8c21160ef
children 2e92f0a6fcac
line wrap: on
line diff
--- a/src/luan/lib/IoLib.java	Fri Jun 13 17:05:31 2014 +0000
+++ b/src/luan/lib/IoLib.java	Fri Jun 13 19:04:05 2014 +0000
@@ -37,10 +37,7 @@
 		@Override public Object call(LuanState luan,Object[] args) {
 			LuanTable module = new LuanTable();
 			try {
-				add( module, "file", String.class );
-				add( module, "java_resource_to_url", String.class );
-				add( module, "url", String.class );
-				add( module, "java_resource", String.class );
+				add( module, "file", LuanState.class, String.class );
 				add( module, "read_console_line", String.class );
 
 				LuanTable stdin = new LuanTable();
@@ -91,15 +88,6 @@
 		return blocks(System.in,n);
 	}
 
-	public static String java_resource_to_url(String path) {
-		URL url = ClassLoader.getSystemResource(path);
-		return url==null ? null : url.toString();
-	}
-
-	public static LuanTable java_resource(String path) throws IOException {
-		return url(java_resource_to_url(path));
-	}
-
 	public static String read_console_line(String prompt) throws IOException {
 		if( prompt==null )
 			prompt = "> ";
@@ -224,6 +212,7 @@
 
 	public static abstract class LuanIn {
 		abstract InputStream inputStream() throws IOException;
+		abstract String name();
 
 		public String read_text() throws IOException {
 			Reader in = new InputStreamReader(inputStream());
@@ -251,6 +240,9 @@
 		LuanTable table() {
 			LuanTable tbl = new LuanTable();
 			try {
+				tbl.put( "name", new LuanJavaFunction(
+					LuanIn.class.getMethod( "name" ), this
+				) );
 				tbl.put( "read_text", new LuanJavaFunction(
 					LuanIn.class.getMethod( "read_text" ), this
 				) );
@@ -328,10 +320,10 @@
 		InputStream inputStream() throws IOException {
 			return url.openStream();
 		}
-	}
 
-	public static LuanTable url(String s) throws MalformedURLException {
-		return new LuanUrl(s).table();
+		String name() {
+			return url.toString();
+		}
 	}
 
 	public static final class LuanFile extends LuanIO {
@@ -348,10 +340,27 @@
 		OutputStream outputStream() throws IOException {
 			return new FileOutputStream(file);
 		}
+
+		String name() {
+			return file.toString();
+		}
 	}
 
-	public static LuanTable file(String name) {
-		return new LuanFile(name).table();
+	public static LuanIn luanIo(LuanState luan,String name) throws LuanException {
+		if( Utils.isFile(name) )
+			return new LuanFile(name);
+		String url = Utils.toUrl(name);
+		if( url == null )
+			throw luan.exception( "file '"+name+"' not found" );
+		try {
+			return new LuanUrl(url);
+		} catch(MalformedURLException e) {
+			throw new RuntimeException(e);
+		}
+	}
+
+	public static LuanTable file(LuanState luan,String name) throws LuanException {
+		return luanIo(luan,name).table();
 	}
 
 	public static final class LuanSocket extends LuanIO {
@@ -373,6 +382,10 @@
 			return socket.getOutputStream();
 		}
 
+		String name() {
+			return socket.toString();
+		}
+
 		public LuanTable pickle_client(LuanState luan) throws IOException {
 			DataInputStream in = new DataInputStream(new BufferedInputStream(inputStream()));
 			DataOutputStream out = new DataOutputStream(new BufferedOutputStream(outputStream()));