Author: bdelacretaz
Date: Fri Aug 28 10:27:39 2009
New Revision: 808842
URL: http://svn.apache.org/viewvc?rev=808842&view=rev
Log:
SLING-1000 - improve navigation by displaying requests methods and partial path
Modified:
sling/trunk/bundles/engine/src/main/java/org/apache/sling/engine/impl/request/RequestHistoryConsolePlugin.java
Modified:
sling/trunk/bundles/engine/src/main/java/org/apache/sling/engine/impl/request/RequestHistoryConsolePlugin.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/engine/src/main/java/org/apache/sling/engine/impl/request/RequestHistoryConsolePlugin.java?rev=808842&r1=808841&r2=808842&view=diff
==============================================================================
---
sling/trunk/bundles/engine/src/main/java/org/apache/sling/engine/impl/request/RequestHistoryConsolePlugin.java
(original)
+++
sling/trunk/bundles/engine/src/main/java/org/apache/sling/engine/impl/request/RequestHistoryConsolePlugin.java
Fri Aug 28 10:27:39 2009
@@ -20,9 +20,11 @@
import java.io.IOException;
import java.io.PrintWriter;
+import java.util.ArrayList;
import java.util.Dictionary;
import java.util.Hashtable;
import java.util.Iterator;
+import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
@@ -51,6 +53,10 @@
public static final int STORED_REQUESTS_COUNT = 20;
private final SlingHttpServletRequest[] requests = new
SlingHttpServletRequest[STORED_REQUESTS_COUNT];
+
+ /** Need to store methods separately, apparently requests clear this data
when done processing */
+ private final String [] methods = new String[STORED_REQUESTS_COUNT];
+
private int lastRequestIndex = -1;
private RequestHistoryConsolePlugin() {
@@ -69,6 +75,7 @@
index = 0;
}
requests[index] = r;
+ methods[index] = r.getMethod();
lastRequestIndex = index;
}
@@ -130,6 +137,55 @@
return "Recent requests";
}
+ private int getArrayIndex(int displayIndex) {
+ int result = lastRequestIndex - displayIndex;
+ if (result < 0) {
+ result += requests.length;
+ }
+ return result;
+ }
+
+ private String getLinksTable(int currentRequestIndex) {
+ final List<String> links = new ArrayList<String>();
+ for (int i = 0; i < requests.length; i++) {
+ final StringBuilder sb = new StringBuilder();
+ if (requests[i] != null) {
+ sb.append("<a href='" + LABEL + "?index=" + i + "'>");
+ if (i == currentRequestIndex) {
+ sb.append("<b>");
+ }
+ sb.append(getRequestLabel(getArrayIndex(i)));
+ if (i == currentRequestIndex) {
+ sb.append("</b>");
+ }
+ sb.append("</a> ");
+ links.add(sb.toString());
+ }
+ }
+
+ final int nCols = 5;
+ while((links.size() % nCols) != 0) {
+ links.add(" ");
+ }
+
+ final StringBuilder tbl = new StringBuilder();
+
+ tbl.append("<table>\n<tr>\n");
+ int i=0;
+ for(String str : links) {
+ if( (i++ % nCols) == 0) {
+ tbl.append("</tr>\n<tr>\n");
+ }
+ tbl.append("<td>");
+ tbl.append(str);
+ tbl.append("</td>\n");
+ }
+ tbl.append("</tr>\n");
+
+ tbl.append("</table>\n");
+ return tbl.toString();
+ }
+
@Override
protected void renderContent(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
@@ -153,10 +209,7 @@
}
// index is relative to lastRequestIndex
- int arrayIndex = lastRequestIndex - index;
- if (arrayIndex < 0) {
- arrayIndex += requests.length;
- }
+ final int arrayIndex = getArrayIndex(index);
SlingHttpServletRequest r = null;
try {
@@ -178,27 +231,14 @@
pw.println("</thead>");
pw.println("<tbody>");
pw.println("<tr class='content'><td>");
- for (int i = 0; i < requests.length; i++) {
- if (requests[i] != null) {
- final String info = (i == 0 ? " (latest)" : "");
- pw.print("<a href='" + LABEL + "?index=" + i + "'>");
- if (i == index) {
- pw.print("<b>");
- }
- pw.print("Request " + i + info);
- if (i == index) {
- pw.print("</b>");
- }
- pw.println("</a> ");
- }
- }
+ pw.println(getLinksTable(index));
pw.println("</td></tr>");
if (r != null) {
// Request Progress Tracker Info
pw.println("<tr class='content'>");
pw.println("<th colspan='2'class='content container'>");
- pw.print("Request " + index + " - RequestProgressTracker Info");
+ pw.print("Request " + index + " (" + getRequestLabel(index) + ") -
RequestProgressTracker Info");
pw.println("</th></tr>");
pw.println("<tr><td colspan='2'>");
final Iterator<String> it = r.getRequestProgressTracker().getMessages();
@@ -210,4 +250,23 @@
}
pw.println("</tbody></table>");
}
+
+ private String getRequestLabel(int index) {
+ final StringBuilder sb = new StringBuilder();
+ String path = requests[index].getPathInfo();
+ if(path == null) {
+ path = "";
+ }
+
+ sb.append(methods[index]);
+ sb.append(' ');
+
+ final int pos = requests[index].getPathInfo().lastIndexOf('/');
+ if(pos < 0) {
+ sb.append(requests[index].getPathInfo());
+ } else {
+ sb.append(requests[index].getPathInfo().substring(pos+1));
+ }
+ return sb.toString();
+ }
}
\ No newline at end of file