diff web/src/luan/modules/web/HttpServicer.java @ 405:3e68917a0dc6

add LuanMeta
author Franklin Schmidt <fschmidt@gmail.com>
date Wed, 29 Apr 2015 11:10:11 -0600
parents a8d03e6882c6
children 7fd9f1b7b878
line wrap: on
line diff
--- a/web/src/luan/modules/web/HttpServicer.java	Wed Apr 29 07:04:40 2015 -0600
+++ b/web/src/luan/modules/web/HttpServicer.java	Wed Apr 29 11:10:11 2015 -0600
@@ -26,7 +26,7 @@
 import luan.LuanElement;
 import luan.LuanException;
 import luan.LuanTable;
-import luan.AbstractLuanTable;
+import luan.LuanMeta;
 import luan.LuanJavaFunction;
 import luan.LuanExitException;
 import luan.LuanProperty;
@@ -120,7 +120,7 @@
 	private LuanTable requestTable() throws NoSuchMethodException {
 		LuanTable tbl = Luan.newPropertyTable();
 		tbl.put("java",request);
-		LuanTable parameters = new NameTable() {
+		LuanTable parameters = new NameMeta() {
 
 			@Override Object get(String name) {
 				String[] a = request.getParameterValues(name);
@@ -130,13 +130,14 @@
 			@Override Iterator<String> names() {
 				return new EnumerationIterator<String>(request.getParameterNames());
 			}
-
+/*
 			@Override protected String type() {
 				return "request.parameters-table";
 			}
-		};
+*/
+		}.newTable();
 		tbl.put( "parameters", parameters );
-		LuanTable headers = new NameTable() {
+		LuanTable headers = new NameMeta() {
 
 			@Override Object get(String name) {
 				return request.getHeader(name);
@@ -145,11 +146,12 @@
 			@Override Iterator<String> names() {
 				return new EnumerationIterator<String>(request.getHeaderNames());
 			}
-
+/*
 			@Override protected String type() {
 				return "request.headers-table";
 			}
-		};
+*/
+		}.newTable();
 		tbl.put( "headers", headers );
 		tbl.put( "method", new LuanProperty() { public Object get() {
 			return request.getMethod();
@@ -174,15 +176,15 @@
 		tbl.put( "remote_address", new LuanProperty() { public Object get() {
 			return request.getRemoteAddr();
 		} } );
-		LuanTable cookies = new AbstractLuanTable() {
+		LuanTable cookies = new LuanMeta() {
 
-			@Override public final Object get(Object key) {
+			@Override public Object __index(LuanState luan,LuanTable tbl,Object key) {
 				if( !(key instanceof String) )
 					return null;
 				String name = (String)key;
 				return getCookieValue(request,name);
 			}
-
+/*
 			@Override public final Iterator<Map.Entry<Object,Object>> iterator() {
 				return new Iterator<Map.Entry<Object,Object>>() {
 					final Cookie[] cookies = request.getCookies();
@@ -206,7 +208,8 @@
 			@Override protected String type() {
 				return "request.cookies-table";
 			}
-		};
+*/
+		}.newTable();
 		tbl.put( "cookies", cookies );
 
 		String contentType = request.getContentType();
@@ -268,7 +271,7 @@
 		tbl.put("java",response);
 		add( tbl, "send_redirect", String.class );
 		add( tbl, "send_error", Integer.TYPE, String.class );
-		LuanTable headers = new NameTable() {
+		LuanTable headers = new NameMeta() {
 
 			@Override Object get(String name) {
 				return response.getHeader(name);
@@ -278,7 +281,11 @@
 				return response.getHeaderNames().iterator();
 			}
 
-			@Override public void put(Object key,Object val) {
+			@Override public boolean canNewindex() {
+				return true;
+			}
+
+			@Override public void __newindex(LuanState luan,LuanTable tbl,Object key,Object val) {
 				if( !(key instanceof String) )
 					throw new IllegalArgumentException("key must be string for headers table");
 				String name = (String)key;
@@ -293,11 +300,12 @@
 				}
 				throw new IllegalArgumentException("value must be string or integer for headers table");
 			}
-
+/*
 			@Override protected String type() {
 				return "response.headers-table";
 			}
-		};
+*/
+		}.newTable();
 		tbl.put( "headers", headers );
 		tbl.put( "content_type", new LuanProperty() {
 			@Override public Object get() {
@@ -335,7 +343,7 @@
 
 	private LuanTable sessionTable() throws NoSuchMethodException {
 		LuanTable tbl = Luan.newTable();
-		LuanTable attributes = new NameTable() {
+		LuanTable attributes = new NameMeta() {
 
 			@Override Object get(String name) {
 				return request.getSession().getAttribute(name);
@@ -345,17 +353,22 @@
 				return new EnumerationIterator<String>(request.getSession().getAttributeNames());
 			}
 
-			@Override public void put(Object key,Object val) {
+			@Override public boolean canNewindex() {
+				return true;
+			}
+
+			@Override public void __newindex(LuanState luan,LuanTable tbl,Object key,Object val) {
 				if( !(key instanceof String) )
 					throw new IllegalArgumentException("key must be string for session attributes table");
 				String name = (String)key;
 				request.getSession().setAttribute(name,val);
 			}
-
+/*
 			@Override protected String type() {
 				return "session.attributes-table";
 			}
-		};
+*/
+		}.newTable();
 		tbl.put( "attributes", attributes );
 		return tbl;
 	}
@@ -524,17 +537,17 @@
 		}
 	}
 
-	private static abstract class NameTable extends AbstractLuanTable {
+	private static abstract class NameMeta extends LuanMeta {
 		abstract Object get(String name);
 		abstract Iterator<String> names();
 
-		@Override public final Object get(Object key) {
+		@Override public Object __index(LuanState luan,LuanTable tbl,Object key) {
 			if( !(key instanceof String) )
 				return null;
 			String name = (String)key;
 			return get(name);
 		}
-
+/*
 		@Override public final Iterator<Map.Entry<Object,Object>> iterator() {
 			return new Iterator<Map.Entry<Object,Object>>() {
 				Iterator<String> names = names();
@@ -552,6 +565,7 @@
 				}
 			};
 		}
+*/
 	};
 
 	private static String string(Object value) {