blob: ade82af214e35f812cf133ff01537a6af740d751 [file] [log] [blame]
package org.eclipse.gmf.internal.xpand;
import java.util.Collections;
import java.util.Map;
import java.util.Stack;
public class BufferOutput extends AbstractOutput {
/**
* INV: size > 0
*/
private final Stack<StringBuilder> outletStack;
private final Map<String, StringBuilder> namedSlots;
public BufferOutput(StringBuilder buffer) {
this(buffer, null);
}
// XXX not map but config to show whether to append/overwrite content
public BufferOutput(StringBuilder buffer, Map<String, StringBuilder> namedSlots) {
assert buffer != null;
outletStack = new Stack<StringBuilder>();
outletStack.push(buffer);
if (namedSlots != null) {
this.namedSlots = namedSlots;
} else {
this.namedSlots = Collections.emptyMap();
}
}
public void closeFile() {
if (outletStack.size() == 1) {
String msg = "CLOSE FILE without previous openFile";
System.err.println("<<<" + msg);
throw new UnsupportedOperationException(msg);
}
outletStack.pop();
}
public void openFile(String path, String outletName) {
if (!namedSlots.containsKey(outletName)) {
String msg = "OPEN FILE ('" + path + "', " + outletName + ")";
System.err.println(">>>" + msg);
throw new UnsupportedOperationException(msg);
}
outletStack.push(namedSlots.get(outletName));
assert outletStack.peek() != null;
}
@Override
protected void doAppend(String text) {
outletStack.peek().append(text);
}
}