001    // Copyright 2004, 2005 The Apache Software Foundation
002    //
003    // Licensed under the Apache License, Version 2.0 (the "License");
004    // you may not use this file except in compliance with the License.
005    // You may obtain a copy of the License at
006    //
007    //     http://www.apache.org/licenses/LICENSE-2.0
008    //
009    // Unless required by applicable law or agreed to in writing, software
010    // distributed under the License is distributed on an "AS IS" BASIS,
011    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012    // See the License for the specific language governing permissions and
013    // limitations under the License.
014    
015    package org.apache.tapestry.engine;
016    
017    import org.apache.tapestry.IMarkupWriter;
018    import org.apache.tapestry.NestedMarkupWriter;
019    import org.apache.tapestry.markup.Attribute;
020    
021    /**
022     * A {@link IMarkupWriter}that does absolutely <em>nothing</em>; this is used during the rewind
023     * phase of the request cycle when output is discarded anyway.
024     * 
025     * @author Howard Lewis Ship, David Solis
026     * @since 0.2.9
027     */
028    
029    public class NullWriter implements NestedMarkupWriter
030    {
031        private static IMarkupWriter shared;
032    
033        public static IMarkupWriter getSharedInstance()
034        {
035            if (shared == null)
036                shared = new NullWriter();
037    
038            return shared;
039        }
040    
041        public String getBuffer()
042        {
043            return null;
044        }
045    
046        public void printRaw(char[] buffer, int offset, int length)
047        {
048        }
049    
050        public void printRaw(String value)
051        {
052        }
053    
054        public void println()
055        {
056        }
057    
058        public void print(char[] data, int offset, int length)
059        {
060        }
061    
062        public void print(char value)
063        {
064        }
065    
066        public void print(int value)
067        {
068        }
069    
070        public void print(String value)
071        {
072        }
073    
074        /**
075         * Returns <code>this</code>: since a NullWriter doesn't actually do anything, one is as good
076         * as another!.
077         */
078    
079        public NestedMarkupWriter getNestedWriter()
080        {
081            return this;
082        }
083    
084        public String getContentType()
085        {
086            return null;
087        }
088    
089        public void flush()
090        {
091        }
092    
093        public void end()
094        {
095        }
096    
097        public void end(String name)
098        {
099        }
100    
101        public void comment(String value)
102        {
103        }
104    
105        public void closeTag()
106        {
107        }
108    
109        public void close()
110        {
111        }
112    
113        /**
114         * Always returns false.
115         */
116    
117        public boolean checkError()
118        {
119            return false;
120        }
121    
122        public void beginEmpty(String name)
123        {
124        }
125    
126        public void begin(String name)
127        {
128        }
129    
130        public void attribute(String name, int value)
131        {
132        }
133    
134        public void attribute(String name, String value)
135        {
136        }
137        
138        public void attribute(String name, boolean value)
139        {
140        }
141        
142        public void attributeRaw(String name, String value)
143        {
144        }
145        
146        public void attribute(String value)
147        {
148        }
149        
150        public void appendAttribute(String name, boolean value)
151        {
152        }
153        
154        public void appendAttribute(String name, int value)
155        {
156        }
157        
158        public void appendAttribute(String name, String value)
159        {
160        }
161        
162        public void appendAttributeRaw(String name, String value)
163        {
164        }
165        
166        public Attribute getAttribute(String name)
167        {
168            return null;
169        }
170        
171        public boolean hasAttribute(String name)
172        {
173            return false;
174        }
175        
176        public Attribute removeAttribute(String name)
177        {
178            return null;
179        }
180        
181        public void clearAttributes()
182        {
183        }
184        
185        public void print(char[] data, int offset, int length, boolean raw)
186        {
187        }
188    
189        public void print(String value, boolean raw)
190        {
191        }
192    }