comparison web/src/luan/modules/web/HttpServicer.java @ 362:9dbf3433f70f

remove Http.request.get_parameter_values and Http.request.parts; multiple parameter values are now directly returned from indexing Http.request.parameters; multipart values are now in parameters;
author Franklin Schmidt <fschmidt@gmail.com>
date Wed, 15 Apr 2015 20:33:47 -0600
parents 0581238084ad
children a8d03e6882c6
comparison
equal deleted inserted replaced
361:0581238084ad 362:9dbf3433f70f
121 LuanTable tbl = Luan.newPropertyTable(); 121 LuanTable tbl = Luan.newPropertyTable();
122 tbl.put("java",request); 122 tbl.put("java",request);
123 LuanTable parameters = new NameTable() { 123 LuanTable parameters = new NameTable() {
124 124
125 @Override Object get(String name) { 125 @Override Object get(String name) {
126 return request.getParameter(name); 126 String[] a = request.getParameterValues(name);
127 return a==null ? null : a.length==1 ? a[0] : a;
127 } 128 }
128 129
129 @Override Iterator<String> names() { 130 @Override Iterator<String> names() {
130 return new EnumerationIterator<String>(request.getParameterNames()); 131 return new EnumerationIterator<String>(request.getParameterNames());
131 } 132 }
133 @Override protected String type() { 134 @Override protected String type() {
134 return "request.parameters-table"; 135 return "request.parameters-table";
135 } 136 }
136 }; 137 };
137 tbl.put( "parameters", parameters ); 138 tbl.put( "parameters", parameters );
138 add( tbl, "get_parameter_values", String.class );
139 LuanTable headers = new NameTable() { 139 LuanTable headers = new NameTable() {
140 140
141 @Override Object get(String name) { 141 @Override Object get(String name) {
142 return request.getHeader(name); 142 return request.getHeader(name);
143 } 143 }
214 try { 214 try {
215 InputStream in = new BufferedInputStream(request.getInputStream()); 215 InputStream in = new BufferedInputStream(request.getInputStream());
216 final MultiPartInputStream mpis = new MultiPartInputStream(in,contentType,null,null); 216 final MultiPartInputStream mpis = new MultiPartInputStream(in,contentType,null,null);
217 mpis.setDeleteOnExit(true); 217 mpis.setDeleteOnExit(true);
218 parameters = Luan.newTable(); 218 parameters = Luan.newTable();
219 LuanTable parts = Luan.newTable();
220 for( Part p : mpis.getParts() ) { 219 for( Part p : mpis.getParts() ) {
221 final MultiPartInputStream.MultiPart part = (MultiPartInputStream.MultiPart)p; 220 final MultiPartInputStream.MultiPart part = (MultiPartInputStream.MultiPart)p;
222 String name = part.getName(); 221 String name = part.getName();
222 Object value;
223 String filename = part.getContentDispositionFilename(); 223 String filename = part.getContentDispositionFilename();
224 if( filename == null ) { 224 if( filename == null ) {
225 String value = new String(part.getBytes()); 225 value = new String(part.getBytes());
226 parameters.put(name,value);
227 } else { 226 } else {
228 LuanTable partTbl = Luan.newPropertyTable(); 227 LuanTable partTbl = Luan.newPropertyTable();
229 partTbl.put("filename",filename); 228 partTbl.put("filename",filename);
230 partTbl.put("content_type",part.getContentType()); 229 partTbl.put("content_type",part.getContentType());
231 partTbl.put( "content", new LuanProperty() { public Object get() { 230 partTbl.put( "content", new LuanProperty() { public Object get() {
236 return content; 235 return content;
237 } catch(IOException e) { 236 } catch(IOException e) {
238 throw new RuntimeException(e); 237 throw new RuntimeException(e);
239 } 238 }
240 } } ); 239 } } );
241 parts.put(name,partTbl); 240 value = partTbl;
242 } 241 }
242 Object old = parameters.get(name);
243 if( old == null ) {
244 parameters.put(name,value);
245 } else if( old instanceof Object[] ) {
246 Object[] aOld = (Object[])old;
247 Object[] aNew = new Object[aOld.length+1];
248 System.arraycopy(aOld,0,aNew,0,aOld.length);
249 aNew[aOld.length] = value;
250 parameters.put(name,aNew);
251 } else {
252 parameters.put(name,new Object[]{old,value});
253 }
243 } 254 }
244 tbl.put( "parameters", parameters ); 255 tbl.put( "parameters", parameters );
245 tbl.put( "parts", parts );
246 } catch(IOException e) { 256 } catch(IOException e) {
247 throw new RuntimeException(e); 257 throw new RuntimeException(e);
248 } catch(ServletException e) { 258 } catch(ServletException e) {
249 throw new RuntimeException(e); 259 throw new RuntimeException(e);
250 } 260 }
350 } 360 }
351 } 361 }
352 */ 362 */
353 public LuanTable text_writer() throws IOException { 363 public LuanTable text_writer() throws IOException {
354 return IoLuan.textWriter(response.getWriter()); 364 return IoLuan.textWriter(response.getWriter());
355 }
356
357 public LuanTable get_parameter_values(String name) {
358 Object[] a = request.getParameterValues(name);
359 return a==null ? null : TableLuan.pack(a);
360 } 365 }
361 366
362 public void send_redirect(String redirectUrl) 367 public void send_redirect(String redirectUrl)
363 throws IOException 368 throws IOException
364 { 369 {