dviner 2003/08/06 12:02:08
Modified: java/src/org/apache/xindice/server UglyBrowser.java
Log:
fixing the double slash in the path.
now xml documents will be displayed correctly (that is, with the proper html
escaping)
also, added a small revision number to the output display.
--dviner
Revision Changes Path
1.3 +67 -8
xml-xindice/java/src/org/apache/xindice/server/UglyBrowser.java
Index: UglyBrowser.java
===================================================================
RCS file:
/home/cvs/xml-xindice/java/src/org/apache/xindice/server/UglyBrowser.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- UglyBrowser.java 1 Aug 2003 19:40:19 -0000 1.2
+++ UglyBrowser.java 6 Aug 2003 19:02:08 -0000 1.3
@@ -44,13 +44,15 @@
XPathPseudoParser parser = new XPathPseudoParser(path);
/* building the page once we have all the information */
- sb.append("<table border=\"1\" width=\"90%\">");
- sb.append("<tr><td rowspan=\"1\" colspan=\"2\">" +
getPathNavigation(parser, contextPath) + "</td></tr>");
+ sb.append("<table border=\"1\" width=\"90%\">\n");
+ sb.append("<tr><td rowspan=\"1\" colspan=\"2\">" +
getPathNavigation(parser, contextPath) + "</td></tr>\n");
sb.append("<tr><td valign=\"top\">" + getHierarchy(parser,
contextPath, db) + "</td>");
- sb.append("<td valign=\"top\">" + getDetailView(parser, db)
+ "</td></tr>");
- sb.append("</table>");
+ sb.append("<td valign=\"top\">" + getDetailView(parser, db)
+ "</td></tr>\n");
+ sb.append("</table>\n");
}
- sb.append("</center></body></html>");
+ sb.append("</center>");
+ sb.append("<p><font size=\"-1\">Ugly Browser version: $Revision$
</font>\n</p>");
+ sb.append("</body></html>");
response.setContentType("text/html; charset=utf-8");
byte[] resultBytes = sb.toString().getBytes("utf-8");
@@ -101,8 +103,17 @@
}
String[] cols = col.listCollections();
+ String dbLoc = parser.getDatabase();
+ String parserPath = parser.getPath();
+ StringBuffer baseHref = new StringBuffer();
+ baseHref.append("<a href=\"" + contextPath + "?" + dbLoc);
+ if(parserPath.startsWith("/") || dbLoc.endsWith("/"))
+ baseHref.append(parserPath);
+ else
+ baseHref.append("/" + parserPath);
+
for (int i = 0; i < cols.length; i++) {
- result.append("<a href=\"" + contextPath + "?" +
parser.getDatabase() + "/" + parser.getPath());
+ result.append(baseHref);
result.append("/");
result.append(cols[i]);
result.append("\">");
@@ -113,7 +124,7 @@
try {
String[] docs = col.listDocuments();
for (int i = 0; i < docs.length; i++) {
- result.append("<a href=\"" + contextPath + "?" +
parser.getDatabase() + "/" + parser.getPath());
+ result.append(baseHref);
result.append("&");
result.append(docs[i]);
result.append("\">");
@@ -140,8 +151,56 @@
return "Document '" + document + "' not found";
}
- return "Document '" + document + "'<p>" + TextWriter.toString(doc);
+ return "Document '" + document + "'<p>\n"
+ + escapeHtml(TextWriter.toString(doc));
}
+
+ /* simple function to escape the xml stuff that'll
+ * not be displayed correctly in html.
+ */
+ static public String escapeHtml(String value) {
+ StringBuffer buf = new StringBuffer();
+ for (int i = 0; i < value.length(); i++) {
+ char c = value.charAt(i);
+ switch (c) {
+ case '<' :
+ buf.append("<");
+ break;
+ case '>' :
+ buf.append(">");
+ break;
+ case '\'' :
+ buf.append("'");
+ break;
+ case '\"' :
+ buf.append(""");
+ break;
+ case '&' :
+ buf.append("&");
+ break;
+ default :
+ if (isLegalCharacter(c)) {
+ buf.append(c);
+ } else {
+ buf.append("&#");
+ buf.append(String.valueOf(c));
+ buf.append(";");
+ }
+ break;
+ }
+ }
+ return buf.toString();
+ }
+
+ /**
+ * Is the given character allowed inside an HTML document?
+ */
+ static public boolean isLegalCharacter(char c) {
+ if ((c <= 0x07) || (c >= 0x80))
+ return false;
+ else
+ return true;
+ }
public static class XPathPseudoParser {