/******************************************************************************* * Copyright (c) 2004, 2007 Boeing. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Boeing - initial API and implementation *******************************************************************************/ package org.eclipse.nebula.widgets.xviewer.util.internal; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.InetSocketAddress; import java.net.Proxy; import java.net.URL; import java.net.URLConnection; import java.util.Collection; import java.util.List; import java.util.logging.Level; import org.eclipse.nebula.widgets.xviewer.Activator; /** * @author Donald G. Dunne */ public class HtmlUtil { private static final String HTTP_CHARSET_ENCODING = "<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\">"; private static final String begin = "<table "; public final static String LABEL_FONT = "<font color=\"black\" face=\"Arial\" size=\"-1\">"; public static String getHyperlink(String url, String name) { return String.format("<a href=\"%s\">%s</a>", url, name); } public static String textToHtml(String text) { if (text == null) { return ""; } text = text.replaceAll("&", "&"); text = text.replaceAll(">", ">"); text = text.replaceAll("<", "<"); text = text.replaceAll("\"", """); text = text.replaceAll("\\n", "<br/>"); text = text.replaceAll("[\\x0B\\f\\r]+", ""); return text; } public static String htmlToText(String html) { if (html == null) { return ""; } html = html.replaceAll("&", "&"); html = html.replaceAll(">", ">"); html = html.replaceAll("<", "<"); html = html.replaceAll(""", "\""); html = html.replaceAll(" ", " "); return html; } public static String getUrlPageHtml(String urlStr, InetSocketAddress addr) { StringBuffer buffer = new StringBuffer(); try { URL url = new URL(urlStr); URLConnection connection = url.openConnection(new Proxy(Proxy.Type.HTTP, addr)); BufferedReader rd = new BufferedReader(new InputStreamReader(connection.getInputStream())); String line = null; while ((line = rd.readLine()) != null) { buffer.append(line); } rd.close(); return buffer.toString(); } catch (Exception ex) { XViewerLog.log(Activator.class, Level.SEVERE, "Can't getUrlPageHtml"); return simplePage("Exception opening url " + ex.getLocalizedMessage()); } } public static String titledPage(String title, String text) { return simplePage("<head><title>" + title + "</title></head>" + text); } public static String pageEncoding(String html) { return HTTP_CHARSET_ENCODING + html; } public static String simplePage(String text) { return pageEncoding("<html>" + text + "</html>"); } public static String simplePageNoPageEncoding(String text) { return "<html>" + text + "</html>"; } public static String getLabelStr(String labelFont, String str) { return labelFont + "<b>" + textToHtml(str) + "</b></font>"; } public static String getLabelValueStr(String labelFont, String label, String value) { return getLabelStr(labelFont, label) + value; } public static String getLabelValueStr(String label, String value) { return getLabelStr(LABEL_FONT, label + ":") + "  " + value; } public static String color(String color, String str) { return "<font color=\"" + color + "\">" + str + "</font>"; } public static String boldColor(String color, String str) { return "<font color=\"" + color + "\"><b>" + textToHtml(str) + "</b></font>"; } public static String bold(String str) { return "<b>" + textToHtml(str) + "</b>"; } public static String boldColorTags(String color, String str) { return "<font color=\"" + color + "\"><b>" + str + "</b></font>"; } public static String imageBlock(String description, String filename) { String filenames[] = new String[1]; filenames[0] = filename; return imageBlock(description, filenames); } public static String imageBlock(String description, String filenames[]) { StringBuilder str = new StringBuilder(); str.append("<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tr><td>"); if (!description.equals("")) { str.append(description); str.append(HtmlUtil.newline()); } for (int i = 0; i < filenames.length; i++) { str.append("<IMG SRC=\"" + filenames[i] + "\"><br>"); } str.append("</td></tr></table>"); return str.toString(); } public static String urlBlock(String description, String urls[]) { StringBuffer str = new StringBuffer("<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">"); if (!description.equals("")) { str.append(description); str.append(HtmlUtil.newline()); } for (int i = 0; i < urls.length; i++) { str.append("<A HREF=\"" + urls[i] + "\">"); str.append(urls[i]); str.append("</A><br>"); } str.append("</td></tr></table>"); return str.toString(); } public static String heading(int heading, String str, String id) { return "<h" + heading + (id != null && !id.equals("") ? " id=\"" + id + "\"" : "") + ">" + textToHtml( str) + "</h" + heading + ">"; } public static String heading(int heading, String str) { return heading(heading, str, null); } public static String padSpace(int num, String str) { StringBuilder out = new StringBuilder(); for (int i = 0; i < num; i++) { out.append(" "); } out.append(str); return out.toString(); } public static String addSpace(int num) { StringBuilder out = new StringBuilder(); for (int i = 0; i < num; i++) { out.append(" "); } return out.toString(); } public static String para(String str) { return "<p>" + textToHtml(str) + "</p>"; } public static String italics(String str) { return "<i>" + textToHtml(str) + "</i>"; } public static String pre(String str) { return "<pre>" + str + "</pre>"; } public static String newline() { return newline(1); } public static String newline(int num) { StringBuilder str = new StringBuilder(); for (int i = 0; i < num; i++) { str.append("<br />"); } return str + ""; } public static String name(int num) { return nameTarget("" + num); } public static String nameTarget(String str) { if (str == null) { return ""; } return "<A NAME=\"" + str + "\">"; } public static String nameLink(int num, String text) { return nameLink("" + num, text); } public static String nameLink(String name, String text) { return "<A HREF=\"#" + name + "\">" + text + "</A>"; } public static String nameLink(String name) { return "<A HREF=\"#" + name + "\">" + name + "</A>"; } public static String simpleTable(String str) { return simpleTable(str, 100); } /** * Create a table with one row/colum containing str */ public static String simpleTable(String str, int width) { return "<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" width=\"" + width + "%\">" + "<tr><td>" + str + "</td></tr>" + "</table>"; } /** * Create a table with one row/colum containing str */ public static String borderTable(String str, int width, String bgcolor, String caption) { return startBorderTable(width, bgcolor, caption) + str + endBorderTable(); } public static String startBorderTable(int width, String bgcolor, String caption) { String capStr = ""; if (!caption.equals("")) { capStr = "<caption ALIGN=top>" + caption + "</caption>"; } return "<table border=\"1\" align=\"center\" bgcolor=\"" + bgcolor + "\" cellpadding=\"3\" cellspacing=\"0\" width=\"" + width + "%\">" + capStr + "<tr><td>"; } public static String endBorderTable() { return "</td></tr></table>"; } /** * Create a table with one row multi column containing str[] * * @param str = array of strings for columns * @return Return multi-column table string */ public static String multiColumnTable(String[] str) { return multiColumnTable(str, 85); } /** * Create a table with one row multi column containing str[] * * @param str - array of strings for columns * @param width - percent (1..100) of screen for table * @return Return multi-column table string */ public static String multiColumnTable(String[] str, int width) { StringBuffer sb = new StringBuffer("<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" width=\""); sb.append(width); sb.append("%\"><tr>"); for (int i = 0; i < str.length; i++) { sb.append("<td>"); sb.append(str[i]); sb.append("</td>"); } sb.append("</tr></table>"); return sb.toString(); } public static String beginMultiColumnTable(int width) { return beginMultiColumnTable(width, 0); } public static String beginMultiColumnTable(int width, int border) { return beginMultiColumnTable(width, border, null); } public static String beginMultiColumnTable(int width, int border, Integer color) { return "<table border=\"" + border + "\" " + (color != null ? "color=\"" + color + "\"" : "") + " cellpadding=\"3\" cellspacing=\"0\" width=\"" + width + "%\">"; } public static String endMultiColumnTable() { return "</table>"; } public static String addRowMultiColumnTable(String... str) { return addRowMultiColumnTable(str, null, null); } public static String addRowMultiColumnTable(String[] str, String[] colOptions) { return addRowMultiColumnTable(str, colOptions, null); } public static String addRowMultiColumnTable(String[] str, String[] colOptions, String backgroundColor) { StringBuffer sb = new StringBuffer("<tr>"); if (backgroundColor != null) { sb.append("<tr bgcolor=\""); sb.append(backgroundColor); sb.append("\">"); } String show = ""; for (int i = 0; i < str.length; i++) { show = str[i]; if (show == null || show.equals("")) { show = HtmlUtil.addSpace(1); } String colOptionStr = ""; if (colOptions != null) { colOptionStr = colOptions[i]; } sb.append("<td"); sb.append(((colOptionStr != null && !colOptionStr.equals("")) ? colOptionStr : "")); sb.append(">"); sb.append(show); sb.append("</td>"); } sb.append("</tr>"); return sb.toString(); } public static String addRowSpanMultiColumnTable(String str, int span) { return "<tr><td colspan=" + span + ">" + str + "</td></tr>"; } public static class CellItem { String text; private final String fgColor; private final String bgColor; public CellItem(String text) { this(text, null, null); } public CellItem(String text, String fgColor, String bgColor) { this.text = text; this.fgColor = fgColor; this.bgColor = bgColor; } } public static String addRowMultiColumnTable(Collection<CellItem> items) { StringBuilder s = new StringBuilder("<tr>"); for (CellItem item : items) { if (item.text == null || "".equals(item.text)) { item.text = "."; } if (item.bgColor != null) { s.append("<td bgcolor=\"" + item.bgColor + "\">"); } else { s.append("<td>"); } s.append(HtmlUtil.color(item.fgColor, item.text)); s.append("</td>"); } s.append("</tr>"); return s.toString(); } public static String addHeaderRowMultiColumnTable(String[] str) { return addHeaderRowMultiColumnTable(str, null); } public static String addHeaderRowMultiColumnTable(String[] str, Integer width[]) { StringBuilder s = new StringBuilder("<tr>"); String widthStr = ""; for (int i = 0; i < str.length; i++) { if (width != null) { widthStr = " width =\"" + width[i] + "\""; } s.append("<th"); s.append(widthStr); s.append(">"); s.append(str[i]); s.append("</th>"); } s.append("</tr>"); return s.toString(); } public static String addSimpleTableRow(String str) { return "<tr><td>" + str + "</td></tr>"; } public static String beginSimpleTable() { return "<table border=\"0\" cellpadding=\"10\" cellspacing=\"0\" width=\"100%\">"; } public static String beginSimpleTable(int border, int width) { return "<table border=\"" + border + "\" cellpadding=\"10\" cellspacing=\"0\" width=\"+width+%\">"; } public static String endSimpleTable() { return "</table>"; } public static String createTable(List<String> datas, String[] headers, int numColumns, int cellPadding, int border) { StringBuilder table = new StringBuilder(begin); if (datas == null) { throw new IllegalArgumentException("The data can not be null"); } if (datas.size() % numColumns != 0) { throw new IllegalArgumentException( "The table could not be created becuase the data does not match the column size"); } if (border > 0) { table.append("border=\"" + border + "\""); } if (cellPadding > 0) { table.append("cellpadding=\"" + cellPadding + "\""); } table.append(">"); if (headers != null && headers.length == numColumns) { table.append("<tr>"); for (String header : headers) { table.append("<th>" + header + "</th>"); } table.append("</tr>"); } int colIndex = 0; for (String data : datas) { if (colIndex == 0) { table.append("<tr>"); } table.append("<td>" + data + "</td>"); colIndex++; if (colIndex == numColumns) { table.append("</tr>"); colIndex = 0; } } return table.toString(); } public static String getPreData(String data) { return "<style>pre { white-space: pre-wrap; /* CSS 3 */ white-space: -moz-pre-wrap; /* Mozilla, since 1999 */ white-space: -pre-wrap; /* Opera 4-6 */ white-space: -o-pre-wrap; /* Opera 7 */ word-wrap: break-word; /* Internet Explorer 5.5+ */ }</style>" + HtmlUtil.pre( HtmlUtil.textToHtml(data)); } }