if (navigator.getName() != Element.NODE_MAPPING) {
throw unexpectedElement(navigator);
}
// Create mappings
RedirectMappings mappings = new RedirectMappings();
// boolean variables to indicate what we've parsed so far
boolean unresolvedNodes = false;
boolean nodeMap = false;
// Start parsing
Element element = navigator.child();
while (element != null) {
switch (element) {
case USER_NODE_NAME_MATCHING:
if (unresolvedNodes || nodeMap) {
throw unexpectedElement(navigator);
}
mappings.setUseNodeNameMatching(parseRequiredContent(navigator, ValueType.BOOLEAN));
break;
case UNRESOLVED_NODES:
unresolvedNodes = true;
if (nodeMap) {
throw unexpectedElement(navigator);
}
mappings.setUnresolvedNode(parseRequiredContent(navigator, UNKNOWN_NODE_MAPPING_VALUE_TYPE));
break;
case NODE_MAP:
nodeMap = true;
mappings.getMappings().add(nodeMapXmlHandler.read(navigator.fork()));
break;
case UNKNOWN:
throw unknownElement(navigator);
default:
throw unexpectedElement(navigator);