blob: a1e3ae0dfba666f2372abd20a1e2ff8a79ecf82a [file] [log] [blame]
/* 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
// ----------------------------------------------------------------------------