@Override
protected PortalRedirect readElement(StaxNavigator<Element> navigator) {
if (navigator.getName() != Element.PORTAL_REDIRECT) {
throw expectedElement(navigator, Element.PORTAL_REDIRECT);
}
PortalRedirect redirect = new PortalRedirect();
// redirect-site
String redirectSite = getRequiredContent(child(navigator, Element.REDIRECT_SITE), true);
redirect.setRedirectSite(redirectSite);
// name
String name = getRequiredContent(sibling(navigator, Element.NAME), true);
redirect.setName(name);
// enabled
boolean enabled = parseRequiredContent(sibling(navigator, Element.REDIRECT_ENABLED), ValueType.BOOLEAN);
redirect.setEnabled(enabled);
// conditions and node-mapping
boolean conditions = false;
boolean mappings = false;
while (navigator.sibling() != null) {
switch (navigator.getName()) {
case CONDITIONS:
if (conditions || mappings) {
throw unexpectedElement(navigator);
}
conditions = true;
redirect.setConditions((ArrayList<RedirectCondition>) conditionXmlHandler.read(navigator.fork()));
break;
case NODE_MAPPING:
if (mappings) {
throw unexpectedElement(navigator);
}
mappings = true;
redirect.setMappings(mappingsXmlHandler.read(navigator.fork()));
break;
case UNKNOWN:
throw unknownElement(navigator);
default:
throw unexpectedElement(navigator);