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