package com.bagri.xqj;
import static com.bagri.xqj.BagriXQErrors.ex_sequence_closed;
import java.io.IOException;
import java.io.OutputStream;
import java.io.Writer;
import java.util.Properties;
import javax.xml.stream.XMLStreamReader;
import javax.xml.transform.Result;
import javax.xml.transform.sax.SAXResult;
import javax.xml.xquery.XQException;
import javax.xml.xquery.XQItem;
import javax.xml.xquery.XQSequence;
import org.xml.sax.ContentHandler;
import com.bagri.core.xquery.api.XQProcessor;
import com.bagri.support.util.XMLUtils;
public abstract class BagriXQSequence extends BagriXQItemAccessor implements XQSequence {
protected BagriXQDataFactory xqFactory;
BagriXQSequence(BagriXQDataFactory xqFactory, XQProcessor xqProcessor) {
super(xqProcessor);
this.xqFactory = xqFactory;
}
@Override
public XQItem getItem() throws XQException {
checkState(ex_sequence_closed);
return new BagriXQItem(getXQProcessor(), type, value);
}
@Override
public XMLStreamReader getSequenceAsStream() throws XQException {
checkState(ex_sequence_closed);
try {
return XMLUtils.stringToStream(getSequenceAsString(null));
} catch (IOException ex) {
throw new XQException(ex.getMessage());
}
}
@Override
public String getSequenceAsString(Properties props) throws XQException {
checkState(ex_sequence_closed);
props = checkOutputProperties(props);
return getXQProcessor().convertToString(this, props);
}
@Override
public void writeSequence(OutputStream os, Properties props) throws XQException {
checkState(ex_sequence_closed);
if (os == null) {
throw new XQException("Provided OutputStream is null");
}
String result = getSequenceAsString(props);
try {
os.write(result.getBytes());
} catch (IOException ex) {
throw new XQException(ex.getMessage());
}
}
@Override
public void writeSequence(Writer ow, Properties props) throws XQException {
checkState(ex_sequence_closed);
if (ow == null) {
throw new XQException("Provided Writer is null");
}
try {
ow.write(getSequenceAsString(props));
} catch (IOException ex) {
throw new XQException(ex.getMessage());
}
}
@Override
public void writeSequenceToSAX(ContentHandler saxhdlr) throws XQException {
checkState(ex_sequence_closed);
if (saxhdlr == null) {
throw new XQException("Provided ContextHandler is null");
}
try {
XMLUtils.stringToResult(getSequenceAsString(null), new SAXResult(saxhdlr));
} catch (IOException ex) {
throw new XQException(ex.getMessage());
}
}
@Override
public void writeSequenceToResult(Result result) throws XQException {
checkState(ex_sequence_closed);
if (result == null) {
throw new XQException("Provided Result is null");
}
try {
XMLUtils.stringToResult(getSequenceAsString(null), result);
} catch (IOException ex) {
throw new XQException(ex.getMessage());
}
}
}