org.apache.abdera.parser.stax.FOMBuilder Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of fom-impl Show documentation
Show all versions of fom-impl Show documentation
Implementation of Abdera's Feed Object Model. Can be used as a drop in replacement for the abdera-parser artifact.
/*
* 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.abdera.parser.stax;
import java.io.Closeable;
import javax.xml.stream.XMLStreamReader;
import org.apache.abdera.model.Content;
import org.apache.abdera.model.Document;
import org.apache.abdera.model.Element;
import org.apache.abdera.model.Text;
import org.apache.abdera.parser.ParseException;
import org.apache.abdera.parser.ParserOptions;
import org.apache.abdera.util.Constants;
import org.apache.axiom.om.OMContainer;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMException;
import org.apache.axiom.om.impl.builder.Detachable;
import org.apache.axiom.om.impl.builder.StAXOMBuilder;
@SuppressWarnings("unchecked")
public class FOMBuilder extends StAXOMBuilder implements Constants {
private final FOMFactory fomfactory;
private final ParserOptions parserOptions;
public FOMBuilder(FOMFactory factory, XMLStreamReader parser, ParserOptions parserOptions) {
super(factory, new FOMStAXFilter(parser, parserOptions), (Detachable)null, (Closeable)null);
this.parserOptions = parserOptions;
this.fomfactory = factory;
}
public ParserOptions getParserOptions() {
return parserOptions;
}
protected Text.Type getTextType() {
Text.Type ttype = Text.Type.TEXT;
String type = parser.getAttributeValue(null, LN_TYPE);
if (type != null) {
ttype = Text.Type.typeFromString(type);
if (ttype == null)
throw new FOMUnsupportedTextTypeException(type);
}
return ttype;
}
protected Content.Type getContentType() {
Content.Type ctype = Content.Type.TEXT;
String type = parser.getAttributeValue(null, LN_TYPE);
String src = parser.getAttributeValue(null, LN_SRC);
if (type != null) {
ctype = Content.Type.typeFromString(type);
if (ctype == null)
throw new FOMUnsupportedContentTypeException(type);
} else if (type == null && src != null) {
ctype = Content.Type.MEDIA;
}
return ctype;
}
/**
* Method next.
*
* @return Returns int.
* @throws OMException
*/
public int next() throws OMException {
try {
return super.next();
} catch (OMException e) {
// TODO: transforming the OMException here is not ideal!
throw new ParseException(e);
}
}
@Override
protected OMElement constructNode(OMContainer parent, String name) {
return fomfactory.createElementFromBuilder(parser.getName(), parent, this);
}
public Document getFomDocument() {
// For compatibility with earlier Abdera versions, force creation of the document element.
// Note that the only known case where this has a visible effect is when the document is
// not well formed. At least one unit test depends on this behavior.
getDocumentElement();
return (Document)getDocument();
}
public FOMFactory getFactory() {
return fomfactory;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy