001    package net.sf.tacos.markup;
002    
003    import org.apache.tapestry.IMarkupWriter;
004    import org.apache.tapestry.NestedMarkupWriter;
005    import org.apache.tapestry.markup.Attribute;
006    
007    /**
008     * Decorates an existing {@link IMarkupWriter} in order to add
009     * a few shortcut methods.
010     * 
011     * @see #create(String, String...)
012     * @see #createEmpty(String, String...)
013     */
014    public class ExtendedMarkupWriterImpl implements IExtendedMarkupWriter {
015        private IMarkupWriter writer;
016    
017        public ExtendedMarkupWriterImpl(IMarkupWriter writer) {
018            this.writer = writer;
019        }
020    
021        /**
022         * {@inheritDoc}
023         */
024        public IExtendedMarkupWriter createEmpty(String tag, String... attributes) {
025            writer.beginEmpty(tag);
026            writeAttributesAndValues(attributes);
027            return this;
028        }
029    
030        /**
031         * {@inheritDoc}
032         */    
033        public IExtendedMarkupWriter create(String tag, String... attributes) {
034            writer.begin(tag);
035            writeAttributesAndValues(attributes);
036            return this;
037        }
038    
039        private void writeAttributesAndValues(String... attributes) {
040            for (int i=0; i<attributes.length; i+=2) {
041                writer.attribute(attributes[i], attributes[i+1]);
042            }
043        }
044    
045        public void attribute(String name, int value) {
046            writer.attribute(name, value);
047        }
048    
049        public void attribute(String name, boolean value) {
050            writer.attribute(name, value);
051        }
052    
053        public void attribute(String name, String value) {
054            writer.attribute(name, value);
055        }
056    
057        public void attributeRaw(String name, String value) {
058            writer.attributeRaw(name, value);
059        }
060    
061        public void appendAttribute(String name, int value) {
062            writer.appendAttribute(name, value);
063        }
064    
065        public void appendAttribute(String name, boolean value) {
066            writer.appendAttribute(name, value);
067        }
068    
069        public void appendAttribute(String name, String value) {
070            writer.appendAttribute(name, value);
071        }
072    
073        public void appendAttributeRaw(String name, String value) {
074            writer.appendAttributeRaw(name, value);
075        }
076    
077        public boolean hasAttribute(String name) {
078            return writer.hasAttribute(name);
079        }
080    
081        public Attribute getAttribute(String name) {
082            return writer.getAttribute(name);
083        }
084    
085        public Attribute removeAttribute(String name) {
086            return writer.removeAttribute(name);
087        }
088    
089        public void clearAttributes() {
090            writer.clearAttributes();
091        }
092    
093        public void begin(String name) {
094            writer.begin(name);
095        }
096    
097        public void beginEmpty(String name) {
098            writer.beginEmpty(name);
099        }
100    
101        public boolean checkError() {
102            return writer.checkError();
103        }
104    
105        public void close() {
106            writer.close();
107        }
108    
109        public void closeTag() {
110            writer.closeTag();
111        }
112    
113        public void comment(String value) {
114            writer.comment(value);
115        }
116    
117        public void end() {
118            writer.end();
119        }
120    
121        public void end(String name) {
122            writer.end(name);
123        }
124    
125        public void flush() {
126            writer.flush();
127        }
128    
129        public NestedMarkupWriter getNestedWriter() {
130            return writer.getNestedWriter();
131        }
132    
133        public void print(char[] data, int offset, int length) {
134            writer.print(data, offset, length);
135        }
136    
137        public void print(char[] data, int offset, int length, boolean raw) {
138            writer.print(data, offset, length, raw);
139        }
140    
141        public void print(char value) {
142            writer.print(value);
143        }
144    
145        public void print(int value) {
146            writer.print(value);
147        }
148    
149        public void print(String value) {
150            writer.print(value);
151        }
152    
153        public void print(String value, boolean raw) {
154            writer.print(value, raw);
155        }
156    
157        public void println() {
158            writer.println();
159        }
160    
161        public void printRaw(char[] buffer, int offset, int length) {
162            writer.printRaw(buffer, offset, length);
163        }
164    
165        public void printRaw(String value) {
166            writer.printRaw(value);
167        }
168    
169        public String getContentType() {
170            return writer.getContentType();
171        }
172    }
173