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: Attribute.java,v 1.4 2008/09/03 22:28:40 weisun2 Exp $
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterpackage com.sun.identity.saml.assertion;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.common.SystemConfigurationUtil;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.*;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.w3c.dom.*;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.saml.common.SAMLUtilsCommon;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.saml.common.SAMLConstants;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.saml.common.SAMLException;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.saml.common.SAMLRequesterException;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.shared.xml.XMLUtils;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster/**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * The <code>Attribute</code> element specifies an attribute of the assertion
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * subject. The <code>Attribute</code> element is an extension of the
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>AttributeDesignator</code> element
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * that allows the attribute value to be specified.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @supported.all.api
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterpublic class Attribute extends AttributeDesignator {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster protected List _attributeValue;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Constructs an attribute element from an existing XML block.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param element representing a DOM tree element.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception SAMLException if there is an error in the sender or in the
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * element definition.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public Attribute(Element element) throws SAMLException {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // make sure that the input xml block is not null
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (element == null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.debug.message("Attribute: Input is null.");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new SAMLRequesterException(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.bundle.getString("nullInput"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // Make sure this is an Attribute.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String tag = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster tag = element.getLocalName();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ((tag == null) || (!tag.equals("Attribute"))) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.debug.message("Attribute: wrong input");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new SAMLRequesterException(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.bundle.getString("wrongInput"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster int i = 0;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // handle attributes
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster NamedNodeMap atts = element.getAttributes();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster int attrCount = atts.getLength();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster for (i = 0; i < attrCount; i++) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Node att = atts.item(i);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (att.getNodeType() == Node.ATTRIBUTE_NODE) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String attName = att.getLocalName();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if(attName == null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster attName = att.getNodeName();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (attName == null || attName.length() == 0) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (SAMLUtilsCommon.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.debug.message("Attribute:" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "Attribute Name is either null or empty.");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster continue;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster //throw new SAMLRequesterException(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // SAMLUtilsCommon.bundle.getString("nullInput"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (attName.equals("AttributeName")) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster this._attributeName =((Attr)att).getValue().trim();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else if (attName.equals("AttributeNamespace")) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster this._attributeNameSpace = ((Attr)att).getValue().trim();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // AttributeName is required
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (_attributeName == null || _attributeName.length() == 0) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (SAMLUtilsCommon.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.debug.message("Attribute: "+
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "AttributeName is required attribute");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new SAMLRequesterException(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.bundle.getString("missingAttribute"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // AttributeNamespace is required
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (_attributeNameSpace == null || _attributeNameSpace.length() == 0) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (SAMLUtilsCommon.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.debug.message("Attribute: "+
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "AttributeNamespace is required attribute");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new SAMLRequesterException(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.bundle.getString("missingAttribute"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // handle the children of Attribute element
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster NodeList nodes = element.getChildNodes();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster int nodeCount = nodes.getLength();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (nodeCount > 0) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster for (i = 0; i < nodeCount; i++) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Node currentNode = nodes.item(i);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (currentNode.getNodeType() == Node.ELEMENT_NODE) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String tagName = currentNode.getLocalName();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String tagNS = currentNode.getNamespaceURI();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ((tagName == null) || tagName.length() == 0 ||
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster tagNS == null || tagNS.length() == 0) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (SAMLUtilsCommon.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.debug.message("Attribute:" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster " The tag name or tag namespace of child" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster " element is either null or empty.");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new SAMLRequesterException(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.bundle.getString("nullInput"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (tagName.equals("AttributeValue") &&
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster tagNS.equals(SAMLConstants.assertionSAMLNameSpaceURI)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (_attributeValue == null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster _attributeValue = new ArrayList();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (!(_attributeValue.add((Element)currentNode))){
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (SAMLUtilsCommon.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.debug.message(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "Attribute: failed to "+
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "add to the attribute value list.");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new SAMLRequesterException(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.bundle.getString(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "addListError"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (SAMLUtilsCommon.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.debug.message("Attribute:" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "wrong element:" + tagName);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new SAMLRequesterException(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.bundle.getString("wrongInput"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } // end of if (currentNode.getNodeType() == Node.ELEMENT_NODE)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } // end of for loop
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } // end of if (nodeCount > 0)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (_attributeValue == null || _attributeValue.isEmpty()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (SAMLUtilsCommon.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.debug.message("Attribute: " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "should contain at least one AttributeValue.");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new SAMLRequesterException(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.bundle.getString("missingElement"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Constructs an instance of <code>Attribute</code>.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param name A String representing <code>AttributeName</code> (the name
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * of the attribute).
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param nameSpace A String representing the namespace in which
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>AttributeName</code> elements are interpreted.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param values A List of DOM element representing the
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>AttributeValue</code> object.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception SAMLException if there is an error in the sender or in the
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * element definition.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public Attribute(String name, String nameSpace, List values)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throws SAMLException {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster super(name, nameSpace);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (values == null || values.isEmpty()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (SAMLUtilsCommon.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.debug.message("Attribute: AttributeValue is" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "required.");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new SAMLRequesterException(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.bundle.getString("nullInput"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (_attributeValue == null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster _attributeValue = new ArrayList();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // Make sure this is a list of AttributeValue
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Iterator iter = values.iterator();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String tag = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster while (iter.hasNext()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster tag = ((Element) iter.next()).getLocalName();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ((tag == null) || (!tag.equals("AttributeValue"))) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (SAMLUtilsCommon.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.debug.message(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "AttributeValue: wrong input.");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new SAMLRequesterException(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.bundle.getString("wrongInput"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster _attributeValue = values;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Constructs an instance of <code>Attribute</code>.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param name The name of the attribute.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param nameSpace The namespace in which <code>AttributeName</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * elements are interpreted.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param attributeValue an <code>AttributeValue</code> object.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception SAMLException if there is an error in the sender or in
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * the element definition.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public Attribute(String name, String nameSpace, String attributeValue)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throws SAMLException {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster super(name, nameSpace);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String escapeAttVal = SystemConfigurationUtil.getProperty(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLConstants.ESCAPE_ATTR_VALUE, "true");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster boolean escapeAtt = "true".equalsIgnoreCase(escapeAttVal) ?
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster true : false;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (escapeAtt) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster this.addAttributeValue(XMLUtils.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster escapeSpecialCharacters(attributeValue));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster this.addAttributeValue(attributeValue);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns <code>AttributeValue</code> from the Attribute.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return A list of DOM Element representing the
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>AttributeValue</code> block.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @throws SAMLException
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public List getAttributeValue() throws SAMLException {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return _attributeValue;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Adds <code>AttributeValue</code> to the Attribute.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param value A String representing <code>AttributeValue</code>.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception SAMLException
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void addAttributeValue(String value) throws SAMLException {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (value == null || value.length() == 0) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (SAMLUtilsCommon.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.debug.message(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "addAttributeValue: Input is null");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new SAMLRequesterException(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.bundle.getString("nullInput"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster StringBuffer sb = new StringBuffer(300);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster sb.append("<").append(SAMLConstants.ASSERTION_PREFIX).
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster append("AttributeValue").
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster append(SAMLConstants.assertionDeclareStr).
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster append(">").append(value).append("</").
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster append(SAMLConstants.ASSERTION_PREFIX).
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster append("AttributeValue>");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Element ele = XMLUtils.toDOMDocument(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster sb.toString().trim(),
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.debug).getDocumentElement();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (_attributeValue == null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster _attributeValue = new ArrayList();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (!(_attributeValue.add(ele))){
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (SAMLUtilsCommon.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.debug.message("Attribute: failed to "+
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "add to the attribute value list.");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new SAMLRequesterException(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.bundle.getString("addListError"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (Exception e) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.debug.error("addAttributeValue error", e);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new SAMLRequesterException("Exception in addAttributeValue" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster e.getMessage());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Adds <code>AttributeValue</code> to the Attribute.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param element An Element object representing
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>AttributeValue</code>.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception SAMLException
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void addAttributeValue(Element element) throws SAMLException {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (element == null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (SAMLUtilsCommon.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.debug.message(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "addAttributeValue: input is null.");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new SAMLRequesterException(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.bundle.getString("nullInput"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String tag = element.getLocalName();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ((tag == null) || (!tag.equals("AttributeValue"))) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (SAMLUtilsCommon.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.debug.message("AttributeValue: wrong input.");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new SAMLRequesterException(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.bundle.getString("wrongInput"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (_attributeValue == null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster _attributeValue = new ArrayList();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (!(_attributeValue.add(element))){
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (SAMLUtilsCommon.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.debug.message("Attribute: failed to "+
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "add to the attribute value list.");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new SAMLRequesterException(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.bundle.getString("addListError"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (Exception e) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.debug.error("addAttributeValue error", e);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new SAMLRequesterException("Exception in addAttributeValue" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster e.getMessage());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns a String representation of the
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>&lt;saml:Attribute&gt;</code> element,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return A string containing the valid XML for this element.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public String toString() {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return toString(true, false);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns a String representation of the
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>&lt;saml:Attribute&gt;</code> element.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param includeNS Determines whether or not the namespace qualifier
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * is prepended to the Element when converted
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param declareNS Determines whether or not the namespace is declared
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * within the Element.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return A string containing the valid XML for this element
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public String toString(boolean includeNS, boolean declareNS) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster StringBuffer result = new StringBuffer(1000);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String prefix = "";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String uri = "";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (includeNS) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster prefix = SAMLConstants.ASSERTION_PREFIX;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (declareNS) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster uri = SAMLConstants.assertionDeclareStr;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster result.append("<").append(prefix).append("Attribute").append(uri).
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster append(" AttributeName=\"").append(_attributeName).
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster append("\" AttributeNamespace=\"").append(_attributeNameSpace).
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster append("\">\n");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Iterator iter = _attributeValue.iterator();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster while (iter.hasNext()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster result.append(XMLUtils.printAttributeValue((Element)iter.next(),
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster prefix)).append("\n");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster result.append("</").append(prefix).append("Attribute>\n");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return result.toString();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster}