| /* |
| * Copyright (C) 2015 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.ahat; |
| |
| import com.google.common.html.HtmlEscapers; |
| import java.net.URI; |
| import java.net.URISyntaxException; |
| |
| /** |
| * A class representing a small string of document content consisting of text, |
| * links, images, etc. |
| */ |
| class DocString { |
| private StringBuilder mStringBuilder; |
| |
| public DocString() { |
| mStringBuilder = new StringBuilder(); |
| } |
| |
| /** |
| * Construct a new DocString, initialized with the given text. |
| */ |
| public static DocString text(String str) { |
| DocString doc = new DocString(); |
| return doc.append(str); |
| } |
| |
| /** |
| * Construct a new DocString, initialized with the given formatted text. |
| */ |
| public static DocString format(String format, Object... args) { |
| DocString doc = new DocString(); |
| return doc.appendFormat(format, args); |
| } |
| |
| /** |
| * Construct a new DocString, initialized with the given link. |
| */ |
| public static DocString link(URI uri, DocString content) { |
| DocString doc = new DocString(); |
| return doc.appendLink(uri, content); |
| |
| } |
| |
| /** |
| * Construct a new DocString initialized with the given image. |
| */ |
| public static DocString image(URI uri, String alt) { |
| return (new DocString()).appendImage(uri, alt); |
| } |
| |
| /** |
| * Append literal text to the given doc string. |
| * Returns this object. |
| */ |
| public DocString append(String text) { |
| mStringBuilder.append(HtmlEscapers.htmlEscaper().escape(text)); |
| return this; |
| } |
| |
| /** |
| * Append formatted text to the given doc string. |
| * Returns this object. |
| */ |
| public DocString appendFormat(String format, Object... args) { |
| append(String.format(format, args)); |
| return this; |
| } |
| |
| public DocString append(DocString str) { |
| mStringBuilder.append(str.html()); |
| return this; |
| } |
| |
| public DocString appendLink(URI uri, DocString content) { |
| mStringBuilder.append("<a href=\""); |
| mStringBuilder.append(uri.toASCIIString()); |
| mStringBuilder.append("\">"); |
| mStringBuilder.append(content.html()); |
| mStringBuilder.append("</a>"); |
| return this; |
| } |
| |
| public DocString appendImage(URI uri, String alt) { |
| mStringBuilder.append("<img alt=\""); |
| mStringBuilder.append(HtmlEscapers.htmlEscaper().escape(alt)); |
| mStringBuilder.append("\" src=\""); |
| mStringBuilder.append(uri.toASCIIString()); |
| mStringBuilder.append("\" />"); |
| return this; |
| } |
| |
| public DocString appendThumbnail(URI uri, String alt) { |
| mStringBuilder.append("<img height=\"16\" alt=\""); |
| mStringBuilder.append(HtmlEscapers.htmlEscaper().escape(alt)); |
| mStringBuilder.append("\" src=\""); |
| mStringBuilder.append(uri.toASCIIString()); |
| mStringBuilder.append("\" />"); |
| return this; |
| } |
| |
| /** |
| * Convenience function for constructing a URI from a string with a uri |
| * known to be valid. |
| */ |
| public static URI uri(String uriString) { |
| try { |
| return new URI(uriString); |
| } catch (URISyntaxException e) { |
| throw new IllegalStateException("Known good uri has syntax error: " + uriString, e); |
| } |
| } |
| |
| /** |
| * Convenience function for constructing a URI from a formatted string with |
| * a uri known to be valid. |
| */ |
| public static URI formattedUri(String format, Object... args) { |
| return uri(String.format(format, args)); |
| } |
| |
| /** |
| * Render the DocString as html. |
| */ |
| public String html() { |
| return mStringBuilder.toString(); |
| } |
| } |