1 /* Copyright (C) 2003 Vladimir Roubtsov. All rights reserved. 2 * 3 * This program and the accompanying materials are made available under 4 * the terms of the Common Public License v1.0 which accompanies this distribution, 5 * and is available at http://www.eclipse.org/legal/cpl-v10.html 6 * 7 * $Id: IElement.java,v 1.1.1.1 2004/05/09 16:57:41 vlad_r Exp $ 8 */ 9 package com.vladium.emma.report.html.doc; 10 11 import java.util.ArrayList; 12 import java.util.Iterator; 13 import java.util.List; 14 15 // ---------------------------------------------------------------------------- 16 /** 17 * @author Vlad Roubtsov, (C) 2003 18 */ 19 public 20 interface IElement extends ISimpleElement, IElementList 21 { 22 // public: ................................................................ 23 setText(String text, boolean nbsp)24 IElement setText (String text, boolean nbsp); // size() is 0 after this 25 26 abstract class Factory 27 { create(final Tag tag)28 public static IElement create (final Tag tag) 29 { 30 return new ElementImpl (tag, AttributeSet.create ()); 31 } 32 create(final Tag tag, final AttributeSet attrs)33 public static IElement create (final Tag tag, final AttributeSet attrs) 34 { 35 return new ElementImpl (tag, attrs); 36 } 37 38 // TODO: should this extend ElementList? 39 static class ElementImpl extends ISimpleElement.Factory.SimpleElementImpl 40 implements IElement 41 { toString()42 public String toString () 43 { 44 return "<" + m_tag.getName () + ">"; 45 } 46 emit(final HTMLWriter out)47 public void emit (final HTMLWriter out) 48 { 49 final String tagName = m_tag.getName (); 50 51 out.write ('<'); 52 out.write (tagName); 53 54 if (! m_attrs.isEmpty ()) 55 { 56 out.write (' '); 57 m_attrs.emit (out); 58 } 59 60 out.write ('>'); 61 62 for (Iterator c = m_contents.iterator (); c.hasNext (); ) 63 { 64 final IContent content = (IContent) c.next (); 65 content.emit (out); 66 } 67 68 out.write ("</"); 69 out.write (tagName); 70 out.write ('>'); 71 if (DEBUG_HTML) out.eol (); // using ENABLED as DEBUG here 72 } 73 add(final IContent content)74 public IElementList add (final IContent content) 75 { 76 if (content != null) 77 { 78 m_contents.add (content); 79 } 80 81 return this; 82 } 83 add(final int index, final IContent content)84 public IElementList add (final int index, final IContent content) 85 { 86 if (content != null) 87 { 88 m_contents.add (index, content); 89 } 90 91 return this; 92 } 93 size()94 public int size () 95 { 96 return m_contents.size (); 97 } 98 setText(final String text, final boolean nbsp)99 public IElement setText (final String text, final boolean nbsp) 100 { 101 if (text != null) 102 { 103 m_contents.clear (); 104 m_contents.add (new Text (text, nbsp)); 105 } 106 107 return this; 108 } 109 ElementImpl(final Tag tag, final AttributeSet attrs)110 ElementImpl (final Tag tag, final AttributeSet attrs) 111 { 112 super (tag, attrs); 113 114 m_contents = new ArrayList (); 115 } 116 117 118 protected final List /* Content */ m_contents; 119 120 private static final boolean DEBUG_HTML = false; 121 122 } // end of nested class 123 124 } // end of nested class 125 126 } // end of interface 127 // ----------------------------------------------------------------------------