blob: 76c41269e1c4a846c878185f80a6aabfe31f0389 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. The ASF licenses this file to You
* under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License. For additional information regarding
* copyright in this work, please see the NOTICE file in the top level
* directory of this distribution.
*/
package org.apache.abdera2.extra;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import javax.xml.transform.Result;
import javax.xml.transform.stream.StreamResult;
import org.apache.abdera2.Abdera;
import org.apache.abdera2.model.Document;
import org.apache.abdera2.model.Element;
/**
* Provides a simple (and likely somewhat inefficient) implementation of javax.xml.transform.Result that allows Abdera
* objects to be used with the javax.xml.transform API's Only use this once per transform!!!
*/
public final class AbderaResult extends StreamResult implements Result {
private final Abdera abdera;
private final ByteArrayOutputStream out =
new ByteArrayOutputStream();
private Document<?> doc;
public AbderaResult() {
this(Abdera.getInstance());
}
public AbderaResult(Abdera abdera) {
this.abdera = abdera;
}
@SuppressWarnings("unchecked")
public <T extends Element> Document<T> getDocument() {
if (doc == null) {
ByteArrayInputStream in =
new ByteArrayInputStream(out.toByteArray());
doc = abdera.getParser().parse(in);
}
return (Document<T>)doc;
}
@Override
public OutputStream getOutputStream() {
return out;
}
@Override
public Writer getWriter() {
return new OutputStreamWriter(getOutputStream());
}
@Override
public void setOutputStream(OutputStream out) {
throw new UnsupportedOperationException();
}
@Override
public void setWriter(Writer out) {
throw new UnsupportedOperationException();
}
}