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