ContentBuilder.java revision 3828:d30434bde0a8
1/* 2 * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26package jdk.javadoc.internal.doclets.formats.html.markup; 27 28import java.io.IOException; 29import java.io.Writer; 30import java.util.ArrayList; 31import java.util.Collections; 32import java.util.List; 33 34import jdk.javadoc.internal.doclets.toolkit.Content; 35 36/** 37 * A sequence of Content nodes. 38 */ 39public class ContentBuilder extends Content { 40 protected List<Content> contents = Collections.emptyList(); 41 42 @Override 43 public void addContent(Content content) { 44 nullCheck(content); 45 ensureMutableContents(); 46 if (content instanceof ContentBuilder) { 47 contents.addAll(((ContentBuilder) content).contents); 48 } else 49 contents.add(content); 50 } 51 52 @Override 53 public void addContent(CharSequence text) { 54 if (text.length() == 0) 55 return; 56 ensureMutableContents(); 57 Content c = contents.isEmpty() ? null : contents.get(contents.size() - 1); 58 StringContent sc; 59 if (c != null && c instanceof StringContent) { 60 sc = (StringContent) c; 61 } else { 62 contents.add(sc = new StringContent()); 63 } 64 sc.addContent(text); 65 } 66 67 @Override 68 public boolean write(Writer writer, boolean atNewline) throws IOException { 69 for (Content content: contents) { 70 atNewline = content.write(writer, atNewline); 71 } 72 return atNewline; 73 } 74 75 @Override 76 public boolean isEmpty() { 77 for (Content content: contents) { 78 if (!content.isEmpty()) 79 return false; 80 } 81 return true; 82 } 83 84 @Override 85 public int charCount() { 86 int n = 0; 87 for (Content c : contents) 88 n += c.charCount(); 89 return n; 90 } 91 92 private void ensureMutableContents() { 93 if (contents.isEmpty()) 94 contents = new ArrayList<>(); 95 } 96} 97