a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster/**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Copyright (c) 2006 Sun Microsystems Inc. All Rights Reserved
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * The contents of this file are subject to the terms
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * of the Common Development and Distribution License
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * (the License). You may not use this file except in
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * compliance with the License.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * You can obtain a copy of the License at
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * https://opensso.dev.java.net/public/CDDLv1.0.html or
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * opensso/legal/CDDLv1.0.txt
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * See the License for the specific language governing
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * permission and limitations under the License.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * When distributing Covered Code, include this CDDL
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Header Notice in each file and include the License file
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * at opensso/legal/CDDLv1.0.txt.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * If applicable, add the following below the CDDL Header,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * with the fields enclosed by brackets [] replaced by
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * your own identifying information:
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * "Portions Copyrighted [year] [name of copyright owner]"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * $Id: AdviceImpl.java,v 1.4 2008/06/25 05:47:42 qcheng Exp $
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterpackage com.sun.identity.saml2.assertion.impl;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.w3c.dom.Document;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.w3c.dom.Element;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.w3c.dom.Node;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.w3c.dom.NodeList;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.Collections;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.List;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.ArrayList;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.shared.xml.XMLUtils;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.saml2.assertion.Advice;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.saml2.assertion.Assertion;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.saml2.assertion.AssertionIDRef;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.saml2.assertion.AssertionFactory;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.saml2.assertion.EncryptedAssertion;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.saml2.common.SAML2Constants;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.saml2.common.SAML2Exception;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.saml2.common.SAML2SDKUtils;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster/**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * The <code>Advice</code> contains any additional information that the
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * SAML authority wishes to provide. This information may be ignored
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * by applications without affecting either the semantics or the
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * validity of the assertion. An <code>Advice</code> contains a mixture
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * of zero or more <code>Assertion</code>, <code>EncryptedAssertion</code>,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>AssertionIDRef</code>, and <code>AssertionURIRef</code>.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterpublic class AdviceImpl implements Advice {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private List assertions = new ArrayList();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private List encryptedAssertions = new ArrayList();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private List assertionIDRefs = new ArrayList();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private List assertionURIRefs = new ArrayList();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private List additionalInfo = new ArrayList();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private boolean isMutable = true;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public static String ADVICE_ELEMENT = "Advice";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public static String ASSERTION_URI_REF_ELEMENT = "AssertionURIRef";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public static String ASSERTION_ID_REF_ELEMENT = "AssertionIDRef";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public static String ASSERTION_ELEMENT = "Assertion";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public static String ENCRYPTED_ASSERTION_ELEMENT = "EncryptedAssertion";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Default constructor
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public AdviceImpl() {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * This constructor is used to build <code>Advice</code> object from a
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * XML string.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param xml A <code>java.lang.String</code> representing
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * a <code>Advice</code> object
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception SAMLException if it could not process the XML string
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public AdviceImpl(String xml) throws SAML2Exception {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Document document = XMLUtils.toDOMDocument(xml, SAML2SDKUtils.debug);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (document != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Element rootElement = document.getDocumentElement();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster processElement(rootElement);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster makeImmutable();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAML2SDKUtils.debug.error(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "AdviceImpl.processElement(): invalid XML input");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new SAML2Exception(SAML2SDKUtils.bundle.getString(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "errorObtainingElement"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * This constructor is used to build <code>Advice</code> object from a
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * block of existing XML that has already been built into a DOM.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param element A <code>org.w3c.dom.Element</code> representing
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * DOM tree for <code>Advice</code> object
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception SAMLException if it could not process the Element
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public AdviceImpl(Element element) throws SAML2Exception {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster processElement(element);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster makeImmutable();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private void processElement(Element element) throws SAML2Exception {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (element == null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAML2SDKUtils.debug.error(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "AdviceImpl.processElement(): invalid root element");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new SAML2Exception(SAML2SDKUtils.bundle.getString(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "invalid_element"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String elemName = element.getLocalName();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (elemName == null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAML2SDKUtils.debug.error(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "AdviceImpl.processElement(): local name missing");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new SAML2Exception(SAML2SDKUtils.bundle.getString(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "missing_local_name"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (!elemName.equals(ADVICE_ELEMENT)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAML2SDKUtils.debug.error(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "AdviceImpl.processElement(): invalid local name " + elemName);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new SAML2Exception(SAML2SDKUtils.bundle.getString(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "invalid_local_name"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // starts processing subelements
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster NodeList nodes = element.getChildNodes();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster int numOfNodes = nodes.getLength();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster int nextElem = 0;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster while (nextElem < numOfNodes) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Node child = (Node) nodes.item(nextElem);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (child.getNodeType() == Node.ELEMENT_NODE) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String childName = child.getLocalName();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (childName != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String ns = child.getNamespaceURI();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (SAML2Constants.ASSERTION_NAMESPACE_URI.equals(ns)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (childName.equals(ASSERTION_ID_REF_ELEMENT)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster assertionIDRefs.add(AssertionFactory.getInstance().
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster createAssertionIDRef((Element)child));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else if (childName.equals(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ASSERTION_URI_REF_ELEMENT)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster assertionURIRefs.add(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster XMLUtils.getElementValue((Element)child));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else if (childName.equals(ASSERTION_ELEMENT)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster assertions.add(AssertionFactory.getInstance().
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster createAssertion((Element)child));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else if (childName.equals(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ENCRYPTED_ASSERTION_ELEMENT)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster encryptedAssertions.add(AssertionFactory.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster getInstance().createEncryptedAssertion(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster (Element)child));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else if (childName.equals(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ASSERTION_URI_REF_ELEMENT)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster assertionURIRefs.add(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster XMLUtils.getElementValue((Element)child));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster additionalInfo.add(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster XMLUtils.print((Element)child));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster additionalInfo.add(XMLUtils.print((Element)child));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster nextElem++;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns a list of <code>Assertion</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return a list of <code>Assertion</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public List getAssertions() {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return assertions;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Sets a list of <code>Assertion</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param assertions a list of <code>Assertion</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception SAML2Exception if the object is immutable
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void setAssertions(List assertions) throws SAML2Exception {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (!isMutable) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new SAML2Exception(SAML2SDKUtils.bundle.getString(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "objectImmutable"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster this.assertions = assertions;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns a list of <code>AssertionIDRef</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return a list of <code>AssertionIDRef</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public List getAssertionIDRefs() {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return assertionIDRefs;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Sets a list of <code>AssertionIDRef</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param idRefs a list of <code>AssertionIDRef</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception SAML2Exception if the object is immutable
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void setAssertionIDRefs(List idRefs) throws SAML2Exception {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (!isMutable) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new SAML2Exception(SAML2SDKUtils.bundle.getString(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "objectImmutable"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster assertionIDRefs = idRefs;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns a list of <code>AssertionURIRef</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return a list of <code>AssertionURIRef</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public List getAssertionURIRefs() {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return assertionURIRefs;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Sets a list of <code>AssertionURIRef</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param uriRefs a list of <code>AssertionURIRef</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception SAML2Exception if the object is immutable
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void setAssertionURIRefs(List uriRefs) throws SAML2Exception {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (!isMutable) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new SAML2Exception(SAML2SDKUtils.bundle.getString(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "objectImmutable"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster assertionURIRefs = uriRefs;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns a list of <code>EncryptedAssertion</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return a list of <code>EncryptedAssertion</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public List getEncryptedAssertions() {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return encryptedAssertions;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Sets a list of <code>EncryptedAssertion</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param encryptedAssertions a list of <code>EncryptedAssertion</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception SAML2Exception if the object is immutable
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void setEncryptedAssertions(List encryptedAssertions)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throws SAML2Exception {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (!isMutable) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new SAML2Exception(SAML2SDKUtils.bundle.getString(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "objectImmutable"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster this.encryptedAssertions = encryptedAssertions;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns a list of additional information
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return a list of additional information
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public List getAdditionalInfo() {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return additionalInfo;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Sets a list of additional information
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param info a list of additional information
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception SAML2Exception if the object is immutable
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void setAdditionalInfo(List info) throws SAML2Exception {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (!isMutable) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new SAML2Exception(SAML2SDKUtils.bundle.getString(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "objectImmutable"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster this.additionalInfo = info;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns a String representation
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param includeNSPrefix Determines whether or not the namespace
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * qualifier is prepended to the Element when converted
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param declareNS Determines whether or not the namespace is
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * declared within the Element.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return A String representation
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception SAML2Exception if something is wrong during conversion
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public String toXMLString(boolean includeNSPrefix, boolean declareNS)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throws SAML2Exception {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster StringBuffer sb = new StringBuffer(2000);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String NS = "";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String appendNS = "";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (declareNS) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster NS = SAML2Constants.ASSERTION_DECLARE_STR;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (includeNSPrefix) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster appendNS = SAML2Constants.ASSERTION_PREFIX;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster sb.append("<").append(appendNS).append(ADVICE_ELEMENT).
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster append(NS).append(">\n");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster int length = 0;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (assertionIDRefs != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster length = assertionIDRefs.size();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster for (int i = 0; i < length; i++) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster AssertionIDRef assertionIDRef =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster (AssertionIDRef)assertionIDRefs.get(i);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster sb.append(assertionIDRef.toXMLString(includeNSPrefix, false));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (assertionURIRefs != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster length = assertionURIRefs.size();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster for (int i = 0; i < length; i++) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String str = (String)assertionURIRefs.get(i);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster sb.append("<").append(appendNS).
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster append(ASSERTION_URI_REF_ELEMENT).append(">").
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster append(str).append("</").append(appendNS).
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster append(ASSERTION_URI_REF_ELEMENT).append(">\n");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (assertions != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster length = assertions.size();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster for (int i = 0; i < length; i++) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Assertion assertion = (Assertion)assertions.get(i);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster sb.append(assertion.toXMLString(includeNSPrefix, false));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (encryptedAssertions != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster length = encryptedAssertions.size();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster for (int i = 0; i < length; i++) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster EncryptedAssertion ea =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster (EncryptedAssertion)encryptedAssertions.get(i);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster sb.append(ea.toXMLString(includeNSPrefix, false));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (additionalInfo != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster length = additionalInfo.size();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster for (int i = 0; i < length; i++) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String str = (String)additionalInfo.get(i);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster sb.append(str).append("\n");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster sb.append("</").append(appendNS).append(ADVICE_ELEMENT).append(">");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return sb.toString();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns a String representation
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return A String representation
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception SAML2Exception if something is wrong during conversion
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public String toXMLString() throws SAML2Exception {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return this.toXMLString(true, false);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Makes the object immutable
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void makeImmutable() {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (isMutable) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (assertions != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster int length = assertions.size();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster for (int i = 0; i < length; i++) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Assertion assertion = (Assertion)assertions.get(i);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster assertion.makeImmutable();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster assertions = Collections.unmodifiableList(assertions);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (encryptedAssertions != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster encryptedAssertions = Collections.unmodifiableList(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster encryptedAssertions);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (assertionIDRefs != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster int length = assertionIDRefs.size();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster for (int i = 0; i < length; i++) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster AssertionIDRef assertionIDRef =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster (AssertionIDRef)assertionIDRefs.get(i);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster assertionIDRef.makeImmutable();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster assertionIDRefs = Collections.unmodifiableList(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster assertionIDRefs);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (assertionURIRefs != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster assertionURIRefs = Collections.unmodifiableList(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster assertionURIRefs);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (additionalInfo != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster additionalInfo = Collections.unmodifiableList(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster additionalInfo);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster isMutable = false;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns true if the object is mutable
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return true if the object is mutable
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public boolean isMutable() {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return isMutable;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster}