001/*
002 * Copyright 2007 - 2008 JEuclid, http://jeuclid.sf.net
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *      http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016
017/* $Id$ */
018
019/* 
020 * Parts of the contents are heavily inspired by work done for Barcode4J by
021 * Jeremias Maerki, available at http://barcode4j.sf.net/
022 */
023package net.sourceforge.jeuclid.fop;
024
025import net.sourceforge.jeuclid.elements.AbstractJEuclidElement;
026import net.sourceforge.jeuclid.xmlgraphics.Graphics2DImagePainterMathML;
027
028import org.apache.fop.render.Graphics2DAdapter;
029import org.apache.fop.render.Renderer;
030import org.apache.fop.render.RendererContext;
031import org.apache.fop.render.XMLHandler;
032import org.apache.xmlgraphics.java2d.Graphics2DImagePainter;
033import org.w3c.dom.Document;
034
035/**
036 * XMLHandler which draws MathML through a fop G2DAdapter.
037 * 
038 * @version $Revision$
039 */
040public class JEuclidXMLHandler implements XMLHandler {
041
042    /** Creates a new instance of JEuclidXMLHandler. */
043    public JEuclidXMLHandler() {
044    }
045
046    /** {@inheritDoc} */
047    public void handleXML(final RendererContext rendererContext,
048            final Document document, final String ns) throws Exception {
049        final Graphics2DAdapter g2dAdapter = rendererContext.getRenderer()
050                .getGraphics2DAdapter();
051
052        if (g2dAdapter != null) {
053            final Graphics2DImagePainter painter = Graphics2DImagePainterMathML
054                    .createGraphics2DImagePainter(document);
055            g2dAdapter.paintImage(painter, rendererContext,
056                    ((Integer) rendererContext.getProperty("xpos"))
057                            .intValue(), ((Integer) rendererContext
058                            .getProperty("ypos")).intValue(),
059                    ((Integer) rendererContext.getProperty("width"))
060                            .intValue(), ((Integer) rendererContext
061                            .getProperty("height")).intValue());
062
063        }
064    }
065
066    /** {@inheritDoc} */
067    public boolean supportsRenderer(final Renderer renderer) {
068        return renderer.getGraphics2DAdapter() != null;
069    }
070
071    /** {@inheritDoc} */
072    public String getNamespace() {
073        return AbstractJEuclidElement.URI;
074    }
075
076}