Innovimax-SARL/QuiXDM

View on GitHub
src/main/java/innovimax/quixproc/datamodel/convert/saxon/QuiXEventStream2XdmNodeConverter.java

Summary

Maintainability
A
0 mins
Test Coverage
/*
 * QuiXProc: efficient evaluation of XProc Pipelines.
 * Copyright (C) 2011-2018 Innovimax
 * All rights reserved.
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  You may obtain a copy of the License at
 *        http://www.apache.org/licenses/LICENSE-2.0*/
package innovimax.quixproc.datamodel.convert.saxon;

import javax.xml.stream.XMLStreamReader;
import javax.xml.transform.Source;

import innovimax.quixproc.datamodel.convert.QuiXConvertException;
import innovimax.quixproc.datamodel.convert.QuiXEventStream2XMLStreamReader;
import innovimax.quixproc.datamodel.event.IQuiXEventStreamReader;
import net.sf.saxon.pull.PullSource;
import net.sf.saxon.pull.StaxBridge;
import net.sf.saxon.s9api.DocumentBuilder;
import net.sf.saxon.s9api.SaxonApiException;
import net.sf.saxon.s9api.XdmNode;

class QuiXEventStream2XdmNodeConverter {
    private final IQuiXEventStreamReader reader;
    private final DocumentBuilder db;
    private XdmNode node = null;

    private static int counter = 1;
    private final int rank = counter++;

    public QuiXEventStream2XdmNodeConverter(final DocumentBuilder db, final IQuiXEventStreamReader reader) {
        this.reader = reader;
        this.db = db;
    }

    public XdmNode exec() {
        // System.out.println("DOMConverter.exec("+rank+")");
        try {
            final XMLStreamReader xer = new QuiXEventStream2XMLStreamReader(this.reader);
            try {
                final StaxBridge sb = new StaxBridge();
                sb.setXMLStreamReader(xer);
                final Source source = new PullSource(sb);
                this.node = this.db.build(source);
            } catch (final SaxonApiException e) {
                e.printStackTrace();
            } finally {
                this.reader.close();
            }
            return this.node;
        } catch (final Exception e) {
            throw new QuiXConvertException(e);
        }
    }

}