1
2
3
4
5
6
7
8
9
10
11 package org.eclipse.jgit.junit.http;
12
13 import java.util.Collections;
14 import java.util.Enumeration;
15 import java.util.Map;
16 import java.util.TreeMap;
17
18 import org.eclipse.jetty.server.Request;
19 import org.eclipse.jetty.server.Response;
20
21
22
23
24 public class AccessEvent {
25 private final String method;
26
27 private final String uri;
28
29 private final Map<String, String> requestHeaders;
30
31 private final Map<String, String[]> parameters;
32
33 private int status;
34
35 private Map<String, String> responseHeaders;
36
37 AccessEvent(Request req) {
38 method = req.getMethod();
39 uri = req.getRequestURI();
40 requestHeaders = cloneHeaders(req);
41 parameters = clone(req.getParameterMap());
42 }
43
44 void setResponse(Response rsp) {
45 status = rsp.getStatus();
46 responseHeaders = cloneHeaders(rsp);
47 }
48
49 private static Map<String, String> cloneHeaders(Request req) {
50 Map<String, String> r = new TreeMap<>();
51 Enumeration hn = req.getHeaderNames();
52 while (hn.hasMoreElements()) {
53 String key = (String) hn.nextElement();
54 if (!r.containsKey(key)) {
55 r.put(key, req.getHeader(key));
56 }
57 }
58 return Collections.unmodifiableMap(r);
59 }
60
61 private static Map<String, String> cloneHeaders(Response rsp) {
62 Map<String, String> r = new TreeMap<>();
63 Enumeration<String> hn = rsp.getHttpFields().getFieldNames();
64 while (hn.hasMoreElements()) {
65 String key = hn.nextElement();
66 if (!r.containsKey(key)) {
67 Enumeration<String> v = rsp.getHttpFields().getValues(key);
68 r.put(key, v.nextElement());
69 }
70 }
71 return Collections.unmodifiableMap(r);
72 }
73
74 @SuppressWarnings("unchecked")
75 private static Map<String, String[]> clone(Map parameterMap) {
76 return new TreeMap<>(parameterMap);
77 }
78
79
80
81
82
83
84 public String getMethod() {
85 return method;
86 }
87
88
89
90
91
92
93 public String getPath() {
94 return uri;
95 }
96
97
98
99
100
101
102
103
104 public String getRequestHeader(String name) {
105 return requestHeaders.get(name);
106 }
107
108
109
110
111
112
113
114
115 public String getParameter(String name) {
116 String[] r = parameters.get(name);
117 return r != null && 1 <= r.length ? r[0] : null;
118 }
119
120
121
122
123
124
125 public Map<String, String[]> getParameters() {
126 return parameters;
127 }
128
129
130
131
132
133
134 public int getStatus() {
135 return status;
136 }
137
138
139
140
141
142
143
144
145 public String getResponseHeader(String name) {
146 return responseHeaders != null ? responseHeaders.get(name) : null;
147 }
148
149
150 @Override
151 public String toString() {
152 StringBuilder b = new StringBuilder();
153 b.append(method);
154 b.append(' ');
155 b.append(uri);
156 if (!parameters.isEmpty()) {
157 b.append('?');
158 boolean first = true;
159 for (Map.Entry<String, String[]> e : parameters.entrySet()) {
160 for (String val : e.getValue()) {
161 if (!first) {
162 b.append('&');
163 }
164 first = false;
165
166 b.append(e.getKey());
167 b.append('=');
168 b.append(val);
169 }
170 }
171 }
172 b.append(' ');
173 b.append(status);
174 return b.toString();
175 }
176 }