package org.picketlink.identity.federation.core.parsers.config;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.events.Attribute;
import javax.xml.stream.events.StartElement;
import org.picketlink.identity.federation.core.config.PicketLinkType;
import org.picketlink.identity.federation.core.config.ProviderType;
import org.picketlink.identity.federation.core.config.STSType;
import org.picketlink.identity.federation.core.exceptions.ParsingException;
import org.picketlink.identity.federation.core.handler.config.Handlers;
import org.picketlink.identity.federation.core.parsers.AbstractParser;
import org.picketlink.identity.federation.core.parsers.sts.STSConfigParser;
import org.picketlink.identity.federation.core.parsers.util.StaxParserUtil;
/**
* Parser to parse the consolidated picketlink.xml
*
* @author anil saldhana
*/
public class PicketLinkConfigParser extends AbstractParser {
public static final String PICKETLINK = "PicketLink";
public static final String ENABLE_AUDIT = "EnableAudit";
@Override
public Object parse(XMLEventReader xmlEventReader) throws ParsingException {
PicketLinkType picketLinkType = new PicketLinkType();
StartElement startElement = StaxParserUtil.getNextStartElement(xmlEventReader);
StaxParserUtil.validate(startElement, PICKETLINK);
// parse and set the root element attributes.
QName attributeQName = new QName("", ENABLE_AUDIT);
Attribute attribute = startElement.getAttributeByName(attributeQName);
if (attribute != null) {
picketLinkType.setEnableAudit(Boolean.parseBoolean(StaxParserUtil.getAttributeValue(attribute)));
}
startElement = StaxParserUtil.peekNextStartElement(xmlEventReader);
String tag = StaxParserUtil.getStartElementName(startElement);
while (xmlEventReader.hasNext()) {
if (SAMLConfigParser.IDP.equals(tag)) {
SAMLConfigParser samlConfigParser = new SAMLConfigParser();
ProviderType idp = (ProviderType) samlConfigParser.parse(xmlEventReader);
picketLinkType.setIdpOrSP(idp);
} else if (SAMLConfigParser.SP.equals(tag)) {
SAMLConfigParser samlConfigParser = new SAMLConfigParser();
ProviderType sp = (ProviderType) samlConfigParser.parse(xmlEventReader);
picketLinkType.setIdpOrSP(sp);
} else if (SAMLConfigParser.HANDLERS.equals(tag)) {
SAMLConfigParser samlConfigParser = new SAMLConfigParser();
Handlers handlers = (Handlers) samlConfigParser.parse(xmlEventReader);
picketLinkType.setHandlers(handlers);
} else if (STSConfigParser.ROOT_ELEMENT.equals(tag)) {
STSConfigParser samlConfigParser = new STSConfigParser();
STSType sts = (STSType) samlConfigParser.parse(xmlEventReader);
picketLinkType.setStsType(sts);
}
startElement = StaxParserUtil.peekNextStartElement(xmlEventReader);
if (startElement == null)
break;
tag = StaxParserUtil.getStartElementName(startElement);
}
return picketLinkType;
}
@Override
public boolean supports(QName qname) {
return false;
}
}