/*
* Copyright 2015 Workday, Inc.
*
* This software is available under the MIT license.
* Please see the LICENSE.txt file in this project.
*/
package com.workday.autoparse.xml.context;
import com.workday.autoparse.xml.annotations.XmlElement;
import com.workday.autoparse.xml.annotations.XmlUnknownElement;
import com.workday.autoparse.xml.parser.UnknownElementException;
import com.workday.autoparse.xml.parser.XmlElementParser;
import com.workday.autoparse.xml.parser.XmlStreamParser;
import com.workday.autoparse.xml.parser.XmlStreamParserFactory;
import com.workday.autoparse.xml.utils.Preconditions;
import com.workday.autoparse.xml.utils.StringTransformer;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
/**
* A collection of preferences that can be set when creating a new {@link XmlStreamParser}.
*
* @author nathan.taylor
* @see XmlParserSettingsBuilder
* @see XmlStreamParserFactory#newXmlStreamParser(XmlParserSettings)
* @since 2013-9-18- 19:08
*/
public class XmlParserSettings {
/**
* Represents strategies for how autoparse should handle xml elements that are not mapped to a
* class via @{@link XmlElement}.
*/
public enum UnknownElementHandling {
/**
* Throw an {@link UnknownElementException} if an unmapped xml element is encountered, even
* if there is a class annotated with {@link XmlUnknownElement}.
*/
ERROR,
/**
* Ignore any unmapped xml elements and do not attempt to parse them, even if there is a
* class annotated with {@link XmlUnknownElement}.
*/
IGNORE,
/**
* Parse unknown elements into instance of the class annotated with {@link
* XmlUnknownElement}. If there is no such class, this behaves like {@link #ERROR}.
*/
PARSE
}
private final UnknownElementHandling unknownElementHandling;
private final boolean ignoreUnexpectedChildren;
private final List<StringTransformer> stringTransformers;
private final Class<?> unknownElementClass;
private final XmlElementParser<?> unknownElementParser;
private final Collection<String> partitionPackages;
XmlParserSettings(UnknownElementHandling unknownElementHandling,
boolean ignoreUnexpectedChildren,
Collection<String> partitionPackages) {
this(unknownElementHandling, ignoreUnexpectedChildren, null, null,
Collections.<StringTransformer>emptyList(), partitionPackages);
}
XmlParserSettings(UnknownElementHandling unknownElementHandling,
boolean ignoreUnexpectedChildren,
Class<?> unknownElementClass,
XmlElementParser<?> unknownElementParser,
List<StringTransformer> stringTransformers,
Collection<String> partitionPackages) {
Preconditions.checkArgument(partitionPackages.size() > 0,
"You must declare at least one partition package.");
this.unknownElementHandling = unknownElementHandling;
this.ignoreUnexpectedChildren = ignoreUnexpectedChildren;
this.unknownElementClass = unknownElementClass;
this.unknownElementParser = unknownElementParser;
this.stringTransformers = stringTransformers;
this.partitionPackages = partitionPackages;
}
public boolean ignoresUnexpectedChildren() {
return ignoreUnexpectedChildren;
}
public UnknownElementHandling getUnknownElementHandling() {
return unknownElementHandling;
}
public Class<?> getUnknownElementClass() {
return unknownElementClass;
}
public XmlElementParser<?> getUnknownElementParser() {
return unknownElementParser;
}
public List<StringTransformer> getStringTransformers() {
return stringTransformers;
}
Collection<String> getPartitionPackages() {
return partitionPackages;
}
}