a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Copyright (c) 2006 Sun Microsystems Inc. All Rights Reserved
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 * You can obtain a copy of the License at
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * https://opensso.dev.java.net/public/CDDLv1.0.html or
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * See the License for the specific language governing
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * permission and limitations under the License.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * When distributing Covered Code, include this CDDL
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Header Notice in each file and include the License file
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 * $Id: Attribute.java,v 1.4 2008/09/03 22:28:40 weisun2 Exp $
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.common.SystemConfigurationUtil;
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 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 * @supported.all.api
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterpublic class Attribute extends AttributeDesignator {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Constructs an attribute element from an existing XML block.
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 public Attribute(Element element) throws SAMLException {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // make sure that the input xml block is not null
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.debug.message("Attribute: Input is null.");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.bundle.getString("nullInput"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // Make sure this is an Attribute.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ((tag == null) || (!tag.equals("Attribute"))) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.debug.message("Attribute: wrong input");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.bundle.getString("wrongInput"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // handle attributes
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (att.getNodeType() == Node.ATTRIBUTE_NODE) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (attName == null || attName.length() == 0) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "Attribute Name is either null or empty.");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster //throw new SAMLRequesterException(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // SAMLUtilsCommon.bundle.getString("nullInput"));
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 // AttributeName is required
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (_attributeName == null || _attributeName.length() == 0) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "AttributeName is required attribute");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.bundle.getString("missingAttribute"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // AttributeNamespace is required
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (_attributeNameSpace == null || _attributeNameSpace.length() == 0) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "AttributeNamespace is required attribute");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.bundle.getString("missingAttribute"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // handle the children of Attribute element
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (currentNode.getNodeType() == Node.ELEMENT_NODE) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ((tagName == null) || tagName.length() == 0 ||
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster " The tag name or tag namespace of child" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster " element is either null or empty.");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.bundle.getString("nullInput"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster tagNS.equals(SAMLConstants.assertionSAMLNameSpaceURI)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (!(_attributeValue.add((Element)currentNode))){
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "Attribute: failed to "+
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "add to the attribute value list.");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "addListError"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.bundle.getString("wrongInput"));
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 if (_attributeValue == null || _attributeValue.isEmpty()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "should contain at least one AttributeValue.");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.bundle.getString("missingElement"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Constructs an instance of <code>Attribute</code>.
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 public Attribute(String name, String nameSpace, List values)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.debug.message("Attribute: AttributeValue is" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "required.");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.bundle.getString("nullInput"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // Make sure this is a list of AttributeValue
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ((tag == null) || (!tag.equals("AttributeValue"))) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "AttributeValue: wrong input.");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.bundle.getString("wrongInput"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Constructs an instance of <code>Attribute</code>.
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 public Attribute(String name, String nameSpace, String attributeValue)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String escapeAttVal = SystemConfigurationUtil.getProperty(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster boolean escapeAtt = "true".equalsIgnoreCase(escapeAttVal) ?
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster true : false;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns <code>AttributeValue</code> from the Attribute.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return A list of DOM Element representing the
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>AttributeValue</code> block.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @throws SAMLException
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public List getAttributeValue() throws SAMLException {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Adds <code>AttributeValue</code> to the Attribute.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param value A String representing <code>AttributeValue</code>.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception SAMLException
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void addAttributeValue(String value) throws SAMLException {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "addAttributeValue: Input is null");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.bundle.getString("nullInput"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster sb.append("<").append(SAMLConstants.ASSERTION_PREFIX).
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.debug.message("Attribute: failed to "+
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "add to the attribute value list.");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.bundle.getString("addListError"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.debug.error("addAttributeValue error", e);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new SAMLRequesterException("Exception in addAttributeValue" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Adds <code>AttributeValue</code> to the Attribute.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param element An Element object representing
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>AttributeValue</code>.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception SAMLException
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void addAttributeValue(Element element) throws SAMLException {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "addAttributeValue: input is null.");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.bundle.getString("nullInput"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ((tag == null) || (!tag.equals("AttributeValue"))) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.debug.message("AttributeValue: wrong input.");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.bundle.getString("wrongInput"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.debug.message("Attribute: failed to "+
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "add to the attribute value list.");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.bundle.getString("addListError"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLUtilsCommon.debug.error("addAttributeValue error", e);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new SAMLRequesterException("Exception in addAttributeValue" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns a String representation of the
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code><saml:Attribute></code> element,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return A string containing the valid XML for this element.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return toString(true, false);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns a String representation of the
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code><saml:Attribute></code> element.
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 public String toString(boolean includeNS, boolean declareNS) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster result.append("<").append(prefix).append("Attribute").append(uri).
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster append(" AttributeName=\"").append(_attributeName).
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster append("\" AttributeNamespace=\"").append(_attributeNameSpace).
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster result.append(XMLUtils.printAttributeValue((Element)iter.next(),
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster result.append("</").append(prefix).append("Attribute>\n");