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;