Mercurial Hosting > luan
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) {