KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > vladium > emma > report > html > doc > AttributeSet


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: AttributeSet.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.HashMap JavaDoc;
12 import java.util.Iterator JavaDoc;
13 import java.util.Map JavaDoc;
14
15 import com.vladium.util.Strings;
16
17 // ----------------------------------------------------------------------------
18
/**
19  * @author Vlad Roubtsov, (C) 2003
20  */

21 public
22 abstract class AttributeSet implements IContent
23 {
24     // public: ................................................................
25

26     public static AttributeSet create ()
27     {
28         return new AttributeSetImpl ();
29     }
30     
31     // ACCESSORS:
32

33     public abstract boolean isEmpty ();
34     
35     // MUTATORS:
36

37     public abstract AttributeSet set (Attribute attr, String JavaDoc value);
38     public abstract AttributeSet set (Attribute attr, int value);
39     
40     // protected: .............................................................
41

42     // package: ...............................................................
43

44     
45     AttributeSet () {}
46     
47     // private: ...............................................................
48

49     
50     private static final class AttributeSetImpl extends AttributeSet
51     {
52         public void emit (final HTMLWriter out)
53         {
54             boolean first = true;
55             for (Iterator JavaDoc a = m_attrMap.entrySet ().iterator (); a.hasNext (); )
56             {
57                 final Map.Entry JavaDoc entry = (Map.Entry JavaDoc) a.next ();
58                 
59                 final Attribute attr = (Attribute) entry.getKey ();
60                 final String JavaDoc value = entry.getValue ().toString ();
61                 
62                 if (first)
63                     first = false;
64                 else
65                     out.write (' ');
66                     
67                 out.write (attr.getName ());
68                 out.write ("=\"");
69
70                 if ((m_buf != null) && (m_buf.length () <= MAX_BUF_LENGTH))
71                     m_buf.setLength (0);
72                 else
73                     m_buf = new StringBuffer JavaDoc ();
74                 
75                 Strings.HTMLEscape (value, m_buf);
76                 out.write (m_buf.toString ());
77                 
78                 out.write ('\"');
79             }
80         }
81         
82         public boolean isEmpty ()
83         {
84             return m_attrMap.isEmpty ();
85         }
86
87         
88         public AttributeSet set (final Attribute attr, final String JavaDoc value) // null removes?
89
{
90             m_attrMap.put (attr, value);
91             
92             return this;
93         }
94         
95         public AttributeSet set (final Attribute attr, final int value)
96         {
97             m_attrMap.put (attr, new Integer JavaDoc (value)); // TODO: use int factory here
98

99             return this;
100         }
101         
102         
103         AttributeSetImpl ()
104         {
105             m_attrMap = new HashMap JavaDoc ();
106         }
107         
108         // TODO: consider lazy-initing this
109
private final Map JavaDoc /* Attribute->String|Integer */ m_attrMap; // never null
110
private StringBuffer JavaDoc m_buf; // reused by emit()
111

112         private static final int MAX_BUF_LENGTH = 4 * 1024;
113         
114     } // end of nested class
115

116 } // end of class
117
// ----------------------------------------------------------------------------
Popular Tags