Mercurial Hosting > luan
comparison web/src/luan/modules/web/HttpServicer.java @ 415:ce8e19567911
make LuanPropertyMeta a singleton
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Thu, 30 Apr 2015 06:04:17 -0600 |
parents | 8937263f59f6 |
children | 91af5337b9ae |
comparison
equal
deleted
inserted
replaced
414:d2ab2240cc65 | 415:ce8e19567911 |
---|---|
117 this.request = request; | 117 this.request = request; |
118 this.response = response; | 118 this.response = response; |
119 } | 119 } |
120 | 120 |
121 private LuanTable requestTable() throws NoSuchMethodException { | 121 private LuanTable requestTable() throws NoSuchMethodException { |
122 LuanPropertyMeta meta = LuanPropertyMeta.newInstance(); | 122 LuanTable tbl = LuanPropertyMeta.INSTANCE.newTable(); |
123 LuanTable tbl = meta.newTable(); | 123 LuanTable getters = LuanPropertyMeta.INSTANCE.getters(tbl); |
124 tbl.put("java",request); | 124 tbl.put("java",request); |
125 LuanTable parameters = new NameMeta() { | 125 LuanTable parameters = new NameMeta() { |
126 | 126 |
127 @Override Object get(String name) { | 127 @Override Object get(String name) { |
128 return request.getParameter(name); | 128 return request.getParameter(name); |
129 } | 129 } |
130 | 130 |
131 @Override protected Iterator keys() { | 131 @Override protected Iterator keys(LuanTable tbl) { |
132 return new EnumerationIterator(request.getParameterNames()); | 132 return new EnumerationIterator(request.getParameterNames()); |
133 } | 133 } |
134 /* | 134 /* |
135 @Override protected String type() { | 135 @Override protected String type() { |
136 return "request.parameters-table"; | 136 return "request.parameters-table"; |
143 | 143 |
144 @Override Object get(String name) { | 144 @Override Object get(String name) { |
145 return request.getHeader(name); | 145 return request.getHeader(name); |
146 } | 146 } |
147 | 147 |
148 @Override protected Iterator keys() { | 148 @Override protected Iterator keys(LuanTable tbl) { |
149 return new EnumerationIterator(request.getHeaderNames()); | 149 return new EnumerationIterator(request.getHeaderNames()); |
150 } | 150 } |
151 /* | 151 /* |
152 @Override protected String type() { | 152 @Override protected String type() { |
153 return "request.headers-table"; | 153 return "request.headers-table"; |
154 } | 154 } |
155 */ | 155 */ |
156 }.newTable(); | 156 }.newTable(); |
157 tbl.put( "headers", headers ); | 157 tbl.put( "headers", headers ); |
158 meta.getters().put( "method", new LuanJavaFunction( | 158 getters.put( "method", new LuanJavaFunction( |
159 HttpServletRequest.class.getMethod( "getMethod" ), request | 159 HttpServletRequest.class.getMethod( "getMethod" ), request |
160 ) ); | 160 ) ); |
161 meta.getters().put( "path", new LuanJavaFunction( | 161 getters.put( "path", new LuanJavaFunction( |
162 HttpServletRequest.class.getMethod( "getRequestURI" ), request | 162 HttpServletRequest.class.getMethod( "getRequestURI" ), request |
163 ) ); | 163 ) ); |
164 meta.getters().put( "server_name", new LuanJavaFunction( | 164 getters.put( "server_name", new LuanJavaFunction( |
165 HttpServletRequest.class.getMethod( "getServerName" ), request | 165 HttpServletRequest.class.getMethod( "getServerName" ), request |
166 ) ); | 166 ) ); |
167 meta.getters().put( "url", new LuanJavaFunction( | 167 getters.put( "url", new LuanJavaFunction( |
168 HttpServicer.class.getMethod( "getURL" ), this | 168 HttpServicer.class.getMethod( "getURL" ), this |
169 ) ); | 169 ) ); |
170 meta.getters().put( "query_string", new LuanJavaFunction( | 170 getters.put( "query_string", new LuanJavaFunction( |
171 HttpServicer.class.getMethod( "getQueryString" ), this | 171 HttpServicer.class.getMethod( "getQueryString" ), this |
172 ) ); | 172 ) ); |
173 meta.getters().put( "remote_address", new LuanJavaFunction( | 173 getters.put( "remote_address", new LuanJavaFunction( |
174 HttpServletRequest.class.getMethod( "getRemoteAddr" ), request | 174 HttpServletRequest.class.getMethod( "getRemoteAddr" ), request |
175 ) ); | 175 ) ); |
176 LuanTable cookies = new LuanMeta() { | 176 LuanTable cookies = new LuanMeta() { |
177 | 177 |
178 @Override public Object __index(LuanState luan,LuanTable tbl,Object key) { | 178 @Override public Object __index(LuanState luan,LuanTable tbl,Object key) { |
180 return null; | 180 return null; |
181 String name = (String)key; | 181 String name = (String)key; |
182 return getCookieValue(request,name); | 182 return getCookieValue(request,name); |
183 } | 183 } |
184 | 184 |
185 @Override protected Iterator<Object> keys() { | 185 @Override protected Iterator<Object> keys(LuanTable tbl) { |
186 return new Iterator<Object>() { | 186 return new Iterator<Object>() { |
187 final Cookie[] cookies = request.getCookies(); | 187 final Cookie[] cookies = request.getCookies(); |
188 int i = 0; | 188 int i = 0; |
189 | 189 |
190 @Override public boolean hasNext() { | 190 @Override public boolean hasNext() { |
220 Object value; | 220 Object value; |
221 String filename = part.getContentDispositionFilename(); | 221 String filename = part.getContentDispositionFilename(); |
222 if( filename == null ) { | 222 if( filename == null ) { |
223 value = new String(part.getBytes()); | 223 value = new String(part.getBytes()); |
224 } else { | 224 } else { |
225 LuanPropertyMeta partMeta = LuanPropertyMeta.newInstance(); | 225 LuanTable partTbl = LuanPropertyMeta.INSTANCE.newTable(); |
226 LuanTable partTbl = partMeta.newTable(); | |
227 partTbl.put("filename",filename); | 226 partTbl.put("filename",filename); |
228 partTbl.put("content_type",part.getContentType()); | 227 partTbl.put("content_type",part.getContentType()); |
229 partMeta.getters().put( "content", new LuanFunction() { | 228 LuanPropertyMeta.INSTANCE.getters(partTbl).put( "content", new LuanFunction() { |
230 @Override public Object call(LuanState luan,Object[] args) throws LuanException { | 229 @Override public Object call(LuanState luan,Object[] args) throws LuanException { |
231 try { | 230 try { |
232 InputStream in = part.getInputStream(); | 231 InputStream in = part.getInputStream(); |
233 byte[] content = Utils.readAll(in); | 232 byte[] content = Utils.readAll(in); |
234 in.close(); | 233 in.close(); |
269 | 268 |
270 return tbl; | 269 return tbl; |
271 } | 270 } |
272 | 271 |
273 private LuanTable responseTable() throws NoSuchMethodException { | 272 private LuanTable responseTable() throws NoSuchMethodException { |
274 LuanPropertyMeta meta = LuanPropertyMeta.newInstance(); | 273 LuanTable tbl = LuanPropertyMeta.INSTANCE.newTable(); |
275 LuanTable tbl = meta.newTable(); | 274 LuanTable getters = LuanPropertyMeta.INSTANCE.getters(tbl); |
275 LuanTable setters = LuanPropertyMeta.INSTANCE.setters(tbl); | |
276 tbl.put("java",response); | 276 tbl.put("java",response); |
277 add( tbl, "send_redirect", String.class ); | 277 add( tbl, "send_redirect", String.class ); |
278 add( tbl, "send_error", Integer.TYPE, String.class ); | 278 add( tbl, "send_error", Integer.TYPE, String.class ); |
279 LuanTable headers = new NameMeta() { | 279 LuanTable headers = new NameMeta() { |
280 | 280 |
281 @Override Object get(String name) { | 281 @Override Object get(String name) { |
282 return response.getHeader(name); | 282 return response.getHeader(name); |
283 } | 283 } |
284 | 284 |
285 @Override protected Iterator keys() { | 285 @Override protected Iterator keys(LuanTable tbl) { |
286 return response.getHeaderNames().iterator(); | 286 return response.getHeaderNames().iterator(); |
287 } | 287 } |
288 | 288 |
289 @Override public boolean canNewindex() { | 289 @Override public boolean canNewindex() { |
290 return true; | 290 return true; |
310 return "response.headers-table"; | 310 return "response.headers-table"; |
311 } | 311 } |
312 */ | 312 */ |
313 }.newTable(); | 313 }.newTable(); |
314 tbl.put( "headers", headers ); | 314 tbl.put( "headers", headers ); |
315 meta.getters().put( "content_type", new LuanJavaFunction( | 315 getters.put( "content_type", new LuanJavaFunction( |
316 HttpServletResponse.class.getMethod( "getContentType" ), response | 316 HttpServletResponse.class.getMethod( "getContentType" ), response |
317 ) ); | 317 ) ); |
318 meta.setters().put( "content_type", new LuanJavaFunction( | 318 setters.put( "content_type", new LuanJavaFunction( |
319 HttpServletResponse.class.getMethod( "setContentType", String.class ), response | 319 HttpServletResponse.class.getMethod( "setContentType", String.class ), response |
320 ) ); | 320 ) ); |
321 meta.getters().put( "character_encoding", new LuanJavaFunction( | 321 getters.put( "character_encoding", new LuanJavaFunction( |
322 HttpServletResponse.class.getMethod( "getCharacterEncoding" ), response | 322 HttpServletResponse.class.getMethod( "getCharacterEncoding" ), response |
323 ) ); | 323 ) ); |
324 meta.setters().put( "character_encoding", new LuanJavaFunction( | 324 setters.put( "character_encoding", new LuanJavaFunction( |
325 HttpServletResponse.class.getMethod( "setCharacterEncoding", String.class ), response | 325 HttpServletResponse.class.getMethod( "setCharacterEncoding", String.class ), response |
326 ) ); | 326 ) ); |
327 add( tbl, "text_writer" ); | 327 add( tbl, "text_writer" ); |
328 add( tbl, "set_cookie", String.class, String.class, Boolean.TYPE, String.class ); | 328 add( tbl, "set_cookie", String.class, String.class, Boolean.TYPE, String.class ); |
329 add( tbl, "remove_cookie", String.class, String.class ); | 329 add( tbl, "remove_cookie", String.class, String.class ); |
330 meta.getters().put( "status", new LuanJavaFunction( | 330 getters.put( "status", new LuanJavaFunction( |
331 HttpServletResponse.class.getMethod( "getStatus" ), response | 331 HttpServletResponse.class.getMethod( "getStatus" ), response |
332 ) ); | 332 ) ); |
333 meta.setters().put( "status", new LuanJavaFunction( | 333 setters.put( "status", new LuanJavaFunction( |
334 HttpServletResponse.class.getMethod( "setStatus", Integer.TYPE ), response | 334 HttpServletResponse.class.getMethod( "setStatus", Integer.TYPE ), response |
335 ) ); | 335 ) ); |
336 return tbl; | 336 return tbl; |
337 } | 337 } |
338 | 338 |
342 | 342 |
343 @Override Object get(String name) { | 343 @Override Object get(String name) { |
344 return request.getSession().getAttribute(name); | 344 return request.getSession().getAttribute(name); |
345 } | 345 } |
346 | 346 |
347 @Override protected Iterator keys() { | 347 @Override protected Iterator keys(LuanTable tbl) { |
348 return new EnumerationIterator(request.getSession().getAttributeNames()); | 348 return new EnumerationIterator(request.getSession().getAttributeNames()); |
349 } | 349 } |
350 | 350 |
351 @Override public boolean canNewindex() { | 351 @Override public boolean canNewindex() { |
352 return true; | 352 return true; |