org.picketlink.config.PicketLinkConfigParser Maven / Gradle / Ivy
/*
* JBoss, Home of Professional Open Source
*
* Copyright 2013 Red Hat, Inc. and/or its affiliates.
*
* Licensed 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.
*/
package org.picketlink.config;
import org.picketlink.common.exceptions.ParsingException;
import org.picketlink.common.parsers.AbstractParser;
import org.picketlink.common.util.StaxParserUtil;
import org.picketlink.config.federation.PicketLinkType;
import org.picketlink.config.federation.ProviderType;
import org.picketlink.config.federation.STSType;
import org.picketlink.config.federation.handler.Handlers;
import org.picketlink.config.federation.parsers.SAMLConfigParser;
import org.picketlink.config.federation.parsers.STSConfigParser;
import org.picketlink.config.idm.IDMType;
import org.picketlink.config.idm.parsers.IDMConfigParser;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.events.Attribute;
import javax.xml.stream.events.StartElement;
/**
* 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);
} else if (IDMConfigParser.ROOT_ELEMENT.equals(tag)) {
IDMConfigParser parser = new IDMConfigParser();
IDMType idmType = (IDMType) parser.parse(xmlEventReader);
picketLinkType.setIdmType(idmType);
}
// avoid infinite loop if unknown element is found
else {
throw logger.parserUnknownStartElement(tag, startElement.getLocation());
}
startElement = StaxParserUtil.peekNextStartElement(xmlEventReader);
if (startElement == null)
break;
tag = StaxParserUtil.getStartElementName(startElement);
}
return picketLinkType;
}
@Override
public boolean supports(QName qname) {
return false;
}
}