001 // Copyright 2007, 2008 The Apache Software Foundation
002 //
003 // Licensed under the Apache License, Version 2.0 (the "License");
004 // you may not use this file except in compliance with the License.
005 // You may obtain a copy of the License at
006 //
007 // http://www.apache.org/licenses/LICENSE-2.0
008 //
009 // Unless required by applicable law or agreed to in writing, software
010 // distributed under the License is distributed on an "AS IS" BASIS,
011 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012 // See the License for the specific language governing permissions and
013 // limitations under the License.
014
015 package org.apache.tapestry5.internal.renderers;
016
017 import org.apache.tapestry5.MarkupWriter;
018 import org.apache.tapestry5.internal.InternalConstants;
019 import org.apache.tapestry5.ioc.annotations.Primary;
020 import org.apache.tapestry5.services.Context;
021 import org.apache.tapestry5.services.ObjectRenderer;
022 import org.apache.tapestry5.services.Request;
023
024 import java.util.List;
025
026 public class RequestRenderer implements ObjectRenderer<Request>
027 {
028 private final Context context;
029
030 private final ObjectRenderer masterObjectRenderer;
031
032 public RequestRenderer(@Primary ObjectRenderer masterObjectRenderer, Context context)
033 {
034 this.masterObjectRenderer = masterObjectRenderer;
035 this.context = context;
036 }
037
038 public void render(Request request, MarkupWriter writer)
039 {
040 writer.element("dl");
041
042 dt(writer, "Context Path");
043
044 writer.element("dd");
045
046 String contextPath = request.getContextPath();
047
048 if (contextPath.equals(""))
049 {
050 writer.element("em");
051 writer.write("none (deployed as root)");
052 writer.end();
053 }
054 else
055 {
056 writer.write(contextPath);
057 }
058 writer.end(); // dd
059
060 dt(writer, "Request Path");
061 dd(writer, request.getPath());
062
063 dt(writer, "Locale");
064 dd(writer, request.getLocale().toString());
065
066 dt(writer, "Secure");
067 dd(writer, Boolean.toString(request.isSecure()));
068
069 dt(writer, "Server Name");
070 dd(writer, request.getServerName());
071
072 writer.end();
073
074 parameters(request, writer);
075 headers(request, writer);
076 context(writer);
077 }
078
079 private void context(MarkupWriter writer)
080 {
081 List<String> attributeNames = context.getAttributeNames();
082
083 if (attributeNames.isEmpty()) return;
084
085 section(writer, "Context Attributes");
086
087 writer.element("dl");
088
089 for (String name : attributeNames)
090 {
091 dt(writer, name);
092
093 writer.element("dd");
094
095 masterObjectRenderer.render(context.getAttribute(name), writer);
096
097 writer.end(); // dd
098 }
099
100 writer.end(); // dl
101 }
102
103 private void parameters(Request request, MarkupWriter writer)
104 {
105 List<String> parameterNames = request.getParameterNames();
106
107 if (parameterNames.isEmpty())
108 return;
109
110 section(writer, "Query Parameters");
111
112 writer.element("dl");
113
114 for (String name : parameterNames)
115 {
116 String[] values = request.getParameters(name);
117
118 dt(writer, name);
119
120 writer.element("dd");
121
122 if (values.length > 1)
123 {
124 writer.element("ul");
125
126 for (String value : values)
127 {
128 writer.element("li");
129 writer.write(value);
130 writer.end();
131 }
132
133 writer.end(); // ul
134 }
135 else
136 {
137 writer.write(values[0]);
138 }
139
140 writer.end(); // dd
141 }
142
143 writer.end(); // dl
144 }
145
146 private void dt(MarkupWriter writer, String name)
147 {
148 writer.element("dt");
149 writer.write(name);
150 writer.end();
151 }
152
153 private void dd(MarkupWriter writer, String name)
154 {
155 writer.element("dd");
156 writer.write(name);
157 writer.end();
158 }
159
160 private void section(MarkupWriter writer, String name)
161 {
162 writer.element("div", "class", InternalConstants.OBJECT_RENDER_DIV_SECTION);
163 writer.write(name);
164 writer.end();
165 }
166
167 private void headers(Request request, MarkupWriter writer)
168 {
169 section(writer, "Headers");
170
171 writer.element("dl");
172
173 for (String name : request.getHeaderNames())
174 {
175 dt(writer, name);
176 dd(writer, request.getHeader(name));
177 }
178
179 writer.end(); // dl
180
181 }
182
183 }