/*
 * SVGGraphicsOutput.java
 *
 * Created on January 28, 2005, 5:13 PM
 */

package org.das2.util.awt;

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.apache.batik.svggen.SVGGraphics2D;
import org.w3c.dom.Document;

/**
 *
 * @author eew
 */
public class SvgGraphicsOutput implements GraphicsOutput {
    
    private Writer writer;
    private Document document;
    private SVGGraphics2D graphics;
    private int width;
    private int height;
    
    /** Creates a new instance of SVGGraphicsOutput */
    public SvgGraphicsOutput() {}

    public Graphics getGraphics() {
        return getGraphics2D();
    }

    public Graphics2D getGraphics2D() {
        if (graphics != null) {
            return graphics;
        }
        try {
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();
            document = builder.newDocument();
            graphics = new SVGGraphics2D(document);
            graphics.setSVGCanvasSize(new Dimension(width, height));
            return graphics;
        }
        catch (ParserConfigurationException pce) {
            throw new RuntimeException(pce);
        }
    }

    public void finish() throws IOException {
        graphics.stream(writer, false);
        writer.close();
    }

    public void setOutputStream(OutputStream out) {
        try {
            this.writer = new OutputStreamWriter(out, "UTF-8");
        }
        catch (UnsupportedEncodingException uee) {
            throw new RuntimeException(uee);
        }
    }

    public void setSize(int width, int height) {
        this.width = width;
        this.height = height;
    }

    public void start() {
    }
    
}