|
What this is
Other links
The source code
/*
* Sun Public License Notice
*
* The contents of this file are subject to the Sun Public License
* Version 1.0 (the "License"). You may not use this file except in
* compliance with the License. A copy of the License is available at
* http://www.sun.com/
*
* The Original Code is NetBeans. The Initial Developer of the Original
* Code is Sun Microsystems, Inc. Portions Copyright 1997-2003 Sun
* Microsystems, Inc. All Rights Reserved.
*/
package org.netbeans.modules.schema2beansdev.gen;
import java.util.*;
import java.io.*;
public class GenBuffer extends Writer {
protected int INITIAL_BUFFER_CAPACITY = 512;
protected int curOut;
protected StringBuffer listOut[];
protected int bufferCount;
protected Stack selectStack = new Stack();
private boolean first = false;
private String separator = null;
/**
* @param bufferCount is the number of buffers to create.
*/
public GenBuffer(int bufferCount) {
this.bufferCount = bufferCount;
listOut = new StringBuffer[bufferCount];
privateInit();
}
/**
* @return a fresh GenBuffer with the configuration duplicated
* (number of buffers, etc). The buffers are NOT
* duplicated.
*/
public GenBuffer(GenBuffer source) {
bufferCount = source.bufferCount;
listOut = new StringBuffer[bufferCount];
INITIAL_BUFFER_CAPACITY = source.INITIAL_BUFFER_CAPACITY;
curOut = source.curOut;
first = source.first;
separator = source.separator;
privateInit();
}
/**
* Reset the buffers so that you can use it again.
*/
public void reset() {
privateInit();
}
private void privateInit() {
for (int i = 0; i < bufferCount; i++) {
listOut[i] = new StringBuffer();
listOut[i].ensureCapacity(INITIAL_BUFFER_CAPACITY);
}
}
/**
* Insert some additional buffers.
* Previous buffers are not adjusted automatically.
* select() should be called afterwards to reestablish current buffer.
*/
public void insertAdditionalBuffers(int offset, int count) {
StringBuffer[] newListOut = new StringBuffer[bufferCount + count];
// copy before and including offset
System.arraycopy(listOut, 0, newListOut, 0, offset+1);
// copy after offset
System.arraycopy(listOut, offset+1, newListOut, offset + 1 + count, bufferCount - offset - 1);
// init the new elements
for (int i = 0; i < count; ++i) {
newListOut[offset + 1 + i] = new StringBuffer();
newListOut[offset + 1 + i].ensureCapacity(INITIAL_BUFFER_CAPACITY);
}
bufferCount += count;
listOut = newListOut;
}
/**
* This method has no effect.
*/
public void close() {
}
/**
* This does nothing as we're all in memory.
*/
public void flush() {
}
/**
* Select the current buffer to use as output.
* Valid range is 0 <= @param bufferNum < bufferCount
*/
public void select(int bufferNum) {
if (bufferNum >= bufferCount || bufferNum < 0)
throw new IllegalArgumentException("Invalid bufferNum "+bufferNum+" out of "+bufferCount);
curOut = bufferNum;
}
public void pushSelect(int bufferNum) {
int prevOut = curOut;
// do the select before the push, in case the select throws an exception
select(bufferNum);
selectStack.push(new Integer(prevOut));
}
public void popSelect() {
curOut = ((Integer) selectStack.pop()).intValue();
}
/**
* This method will get called before any write occurs.
*/
protected void beforeWriteHook() {}
/**
* Append the parameter to the current buffer.
*/
public void write(boolean b) throws IOException {
beforeWriteHook();
listOut[curOut].append(b);
}
/**
* Append the parameter to the current buffer.
*/
public void write(char c) throws IOException {
beforeWriteHook();
listOut[curOut].append(c);
}
/**
* Append the parameter to the current buffer.
*/
public void write(char[] str) throws IOException {
beforeWriteHook();
listOut[curOut].append(str);
}
/**
* @see Writer
*/
public void write(char[] cbuf, int off, int len) throws IOException {
beforeWriteHook();
listOut[curOut].append(cbuf, off, len);
}
/**
* Append the parameter to the current buffer.
*/
public void write(double d) throws IOException {
beforeWriteHook();
listOut[curOut].append(d);
}
/**
* Append the parameter to the current buffer.
*/
public void write(float f) throws IOException {
beforeWriteHook();
listOut[curOut].append(f);
}
private CharArrayWriter caw = null;
/**
* Append the parameter to the current buffer *as a character*.
*/
public void write(int i) throws IOException {
// A CharArrayWriter is used, because that was the only way I could
// figure out how to convert an int into a String.
if (caw == null)
caw = new CharArrayWriter(2);
caw.write(i);
beforeWriteHook();
listOut[curOut].append(caw.toString());
caw.reset();
}
/**
* Append the parameter to the current buffer *as a character*.
*/
public void write(long l) throws IOException {
write((int)l);
}
/**
* Append the parameter to the current buffer.
* @see StringBuffer
*/
public void write(Object obj) throws IOException {
beforeWriteHook();
listOut[curOut].append(obj);
}
/**
* write @param s to the current buffer
*/
public void write(String s) throws IOException {
beforeWriteHook();
listOut[curOut].append(s);
}
/**
* write @param s to the current buffer
*/
public void write(StringBuffer s) throws IOException {
beforeWriteHook();
listOut[curOut].append(s);
}
/**
* write @param s1 and @param s2 to the current buffer just as if
* 2 separate writes were done.
*/
public void write(String s1, String s2) throws IOException {
beforeWriteHook();
listOut[curOut].append(s1);
listOut[curOut].append(s2);
}
/**
* write @param s1, @param s2, and @param s3 to the current buffer
* just as if 3 separate writes were done.
*/
public void write(String s1, String s2, String s3) throws IOException {
beforeWriteHook();
listOut[curOut].append(s1);
listOut[curOut].append(s2);
listOut[curOut].append(s3);
}
/**
* write @param s1, @param s2, @param s3, and @param s4 to the current buffer
* just as if 3 separate writes were done.
*/
public void write(String s1, String s2, String s3, String s4) throws IOException {
beforeWriteHook();
listOut[curOut].append(s1);
listOut[curOut].append(s2);
listOut[curOut].append(s3);
listOut[curOut].append(s4);
}
public void write(String str, int bufferNum) throws IOException {
if (bufferNum >= bufferCount || bufferNum < 0)
throw new IllegalArgumentException("Invalid bufferNum "+bufferNum+" out of "+bufferCount);
beforeWriteHook();
listOut[bufferNum].append(str);
}
/**
* setFirst and writeNext work in together to allow easier generation
* or lists where the items in the list are separated by some text
* between each of them.
* For instance,
* setFirst(", ");
* if (doBlue) writeNext("blue");
* if (doGreen) writeNext("green");
* if (doRed) writeNext("red");
*/
public void setFirst(String separator) {
first = true;
this.separator = separator;
}
/**
* Write the next text in the sequence.
*/
public void writeNext(String msg) throws IOException {
writeNext();
write(msg);
}
/**
* Write the next text in the sequence.
*/
public void writeNext(String msg1, String msg2) throws IOException {
writeNext();
write(msg1);
write(msg2);
}
/**
* Write the next text in the sequence.
*/
public void writeNext(String msg1, String msg2, String msg3) throws IOException {
writeNext();
write(msg1);
write(msg2);
write(msg3);
}
/**
* Begin the next in the sequence.
* Equivalent to writeNext(""), where we'll write out the separator.
*/
public void writeNext() throws IOException {
if (first)
first = false;
else
write(separator);
}
/**
* Send buffers to @param out
*/
public void writeTo(Writer out) throws IOException {
for (int i = 0; i < bufferCount; i++)
out.write(listOut[i].toString());
}
/**
* Send buffers to @param out
*/
public void writeTo(OutputStream out) throws IOException {
for (int i = 0; i < bufferCount; i++)
out.write(listOut[i].toString().getBytes());
}
public void writeTo(StringBuffer out) {
for (int i = 0; i < bufferCount; i++)
out.append(listOut[i]);
}
public void writeTo(GenBuffer out) {
int minInCommonBufferCount = bufferCount;
if (out.bufferCount < bufferCount)
minInCommonBufferCount = out.bufferCount;
for (int i = 0; i < minInCommonBufferCount; i++)
out.listOut[i].append(listOut[i]);
if (out.bufferCount < bufferCount) {
// We've got more buffers than our destination. Put all
// of our "extra" ones at the end.
for (int i = minInCommonBufferCount; i < bufferCount; i++)
out.listOut[minInCommonBufferCount-1].append(listOut[i]);
} else {
out.curOut = curOut;
}
out.first = first;
out.separator = separator;
}
/**
* Has anything actually been written here?
*/
public boolean anyContent() {
for (int i = 0; i < bufferCount; i++)
if (listOut[i].length() > 0)
return true;
return false;
}
public int getCurrentPosition() {
return listOut[curOut].length();
}
public void truncateAtPosition(int pos) {
listOut[curOut].setLength(pos);
}
/**
* Return the active StringBuffer
*/
public StringBuffer getBuffer() {
return listOut[curOut];
}
/**
* Ensures the capacity of every buffer is at least @param minimumCapacity.
*/
public void ensureCapacity(int minimumCapacity) {
for (int i = 0; i < bufferCount; i++)
listOut[i].ensureCapacity(minimumCapacity);
}
}
|
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.