/* Copyright (C) 2003 Vladimir Roubtsov. All rights reserved. * * This program and the accompanying materials are made available under * the terms of the Common Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/cpl-v10.html * * $Id: IElement.java,v 1.1.1.1 2004/05/09 16:57:41 vlad_r Exp $ */ package com.vladium.emma.report.html.doc; import java.util.ArrayList; import java.util.Iterator; import java.util.List; // ---------------------------------------------------------------------------- /** * @author Vlad Roubtsov, (C) 2003 */ public interface IElement extends ISimpleElement, IElementList { // public: ................................................................ IElement setText (String text, boolean nbsp); // size() is 0 after this abstract class Factory { public static IElement create (final Tag tag) { return new ElementImpl (tag, AttributeSet.create ()); } public static IElement create (final Tag tag, final AttributeSet attrs) { return new ElementImpl (tag, attrs); } // TODO: should this extend ElementList? static class ElementImpl extends ISimpleElement.Factory.SimpleElementImpl implements IElement { public String toString () { return "<" + m_tag.getName () + ">"; } public void emit (final HTMLWriter out) { final String tagName = m_tag.getName (); out.write ('<'); out.write (tagName); if (! m_attrs.isEmpty ()) { out.write (' '); m_attrs.emit (out); } out.write ('>'); for (Iterator c = m_contents.iterator (); c.hasNext (); ) { final IContent content = (IContent) c.next (); content.emit (out); } out.write ("</"); out.write (tagName); out.write ('>'); if (DEBUG_HTML) out.eol (); // using ENABLED as DEBUG here } public IElementList add (final IContent content) { if (content != null) { m_contents.add (content); } return this; } public IElementList add (final int index, final IContent content) { if (content != null) { m_contents.add (index, content); } return this; } public int size () { return m_contents.size (); } public IElement setText (final String text, final boolean nbsp) { if (text != null) { m_contents.clear (); m_contents.add (new Text (text, nbsp)); } return this; } ElementImpl (final Tag tag, final AttributeSet attrs) { super (tag, attrs); m_contents = new ArrayList (); } protected final List /* Content */ m_contents; private static final boolean DEBUG_HTML = false; } // end of nested class } // end of nested class } // end of interface // ----------------------------------------------------------------------------