Add separate handling of response status.
[jrw.git] / src / jrw / Request.java
CommitLineData
3e20c35c
FT
1package jrw;
2
3import java.util.*;
4
5public class Request {
6 public final Map<Object, Object> env;
7 public final Map<Object, Object> resp = new HashMap<>();
ad84ba3b
FT
8 public String status = "200 OK";
9 public Object body = null;
3e20c35c
FT
10
11 public Request(Map<Object, Object> env) {
12 this.env = env;
13 }
14
15 public String ihead(String name, String def) {
16 StringBuilder buf = new StringBuilder();
17 buf.append("HTTP_");
18 for(int i = 0; i < name.length(); i++) {
19 char c = name.charAt(i);
20 if(c == '-')
21 buf.append('_');
22 else if((c >= 'a') && (c <= 'z'))
23 buf.append((char)(c + ('A' - 'a')));
24 else
25 buf.append(c);
26 }
27 Object ret = env.get(buf.toString());
28 if(ret instanceof String)
29 return((String)ret);
30 return(def);
31 }
32
33 @SuppressWarnings("unchecked")
ad84ba3b 34 public Request ohead(String name, Object val, boolean repl) {
3e20c35c
FT
35 name = "http." + name;
36 if(repl) {
37 resp.put(name, val);
38 } else {
39 Object cur = resp.get(name);
40 if(cur == null)
41 resp.put(name, val);
42 else if(cur instanceof Collection)
43 ((Collection)cur).add(val);
44 else
45 resp.put(name, new ArrayList<Object>(Arrays.asList(cur, val)));
46 }
ad84ba3b 47 return(this);
3e20c35c
FT
48 }
49
ad84ba3b
FT
50 public Request status(String status) {this.status = status; return(this);}
51 public Request body(Object body) {this.body = body; return(this);}
52
3e20c35c 53 public Map<Object, Object> response() {
ad84ba3b
FT
54 resp.put("http.status", status);
55 resp.put("jagi.output", body);
3e20c35c
FT
56 return(resp);
57 }
58}