Use updated SAMLAttribute interface.
authorwassa <wassa@ab3bd59b-922f-494d-bb5f-6f0a3c29deca>
Tue, 15 Mar 2005 23:04:12 +0000 (23:04 +0000)
committerwassa <wassa@ab3bd59b-922f-494d-bb5f-6f0a3c29deca>
Tue, 15 Mar 2005 23:04:12 +0000 (23:04 +0000)
git-svn-id: https://subversion.switch.ch/svn/shibboleth/java-idp/trunk@1301 ab3bd59b-922f-494d-bb5f-6f0a3c29deca

src/edu/internet2/middleware/shibboleth/aa/AAAttribute.java

index 32abcf4..7b82e13 100644 (file)
@@ -1,54 +1,29 @@
-/* 
- * The Shibboleth License, Version 1. 
- * Copyright (c) 2002 
- * University Corporation for Advanced Internet Development, Inc. 
- * All rights reserved
- * 
- * 
- * Redistribution and use in source and binary forms, with or without 
- * modification, are permitted provided that the following conditions are met:
- * 
- * Redistributions of source code must retain the above copyright notice, this 
- * list of conditions and the following disclaimer.
- * 
- * Redistributions in binary form must reproduce the above copyright notice, 
- * this list of conditions and the following disclaimer in the documentation 
- * and/or other materials provided with the distribution, if any, must include 
- * the following acknowledgment: "This product includes software developed by 
- * the University Corporation for Advanced Internet Development 
- * <http://www.ucaid.edu>Internet2 Project. Alternately, this acknowledegement 
- * may appear in the software itself, if and wherever such third-party 
- * acknowledgments normally appear.
- * 
- * Neither the name of Shibboleth nor the names of its contributors, nor 
- * Internet2, nor the University Corporation for Advanced Internet Development, 
- * Inc., nor UCAID may be used to endorse or promote products derived from this 
- * software without specific prior written permission. For written permission, 
- * please contact shibboleth@shibboleth.org
- * 
- * Products derived from this software may not be called Shibboleth, Internet2, 
- * UCAID, or the University Corporation for Advanced Internet Development, nor 
- * may Shibboleth appear in their name, without prior written permission of the 
- * University Corporation for Advanced Internet Development.
- * 
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
- * AND WITH ALL FAULTS. ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 
- * PARTICULAR PURPOSE, AND NON-INFRINGEMENT ARE DISCLAIMED AND THE ENTIRE RISK 
- * OF SATISFACTORY QUALITY, PERFORMANCE, ACCURACY, AND EFFORT IS WITH LICENSEE. 
- * IN NO EVENT SHALL THE COPYRIGHT OWNER, CONTRIBUTORS OR THE UNIVERSITY 
- * CORPORATION FOR ADVANCED INTERNET DEVELOPMENT, INC. BE LIABLE FOR ANY DIRECT, 
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+/*
+ * The Shibboleth License, Version 1. Copyright (c) 2002 University Corporation for Advanced Internet Development, Inc.
+ * All rights reserved Redistribution and use in source and binary forms, with or without modification, are permitted
+ * provided that the following conditions are met: Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution, if any, must include the following acknowledgment: "This product includes software
+ * developed by the University Corporation for Advanced Internet Development <http://www.ucaid.edu>Internet2 Project.
+ * Alternately, this acknowledegement may appear in the software itself, if and wherever such third-party
+ * acknowledgments normally appear. Neither the name of Shibboleth nor the names of its contributors, nor Internet2, nor
+ * the University Corporation for Advanced Internet Development, Inc., nor UCAID may be used to endorse or promote
+ * products derived from this software without specific prior written permission. For written permission, please contact
+ * shibboleth@shibboleth.org Products derived from this software may not be called Shibboleth, Internet2, UCAID, or the
+ * University Corporation for Advanced Internet Development, nor may Shibboleth appear in their name, without prior
+ * written permission of the University Corporation for Advanced Internet Development. THIS SOFTWARE IS PROVIDED BY THE
+ * COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND WITH ALL FAULTS. ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT ARE
+ * DISCLAIMED AND THE ENTIRE RISK OF SATISFACTORY QUALITY, PERFORMANCE, ACCURACY, AND EFFORT IS WITH LICENSEE. IN NO
+ * EVENT SHALL THE COPYRIGHT OWNER, CONTRIBUTORS OR THE UNIVERSITY CORPORATION FOR ADVANCED INTERNET DEVELOPMENT, INC.
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
-package edu.internet2.middleware.shibboleth.aa;
 
+package edu.internet2.middleware.shibboleth.aa;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -61,10 +36,8 @@ import javax.xml.namespace.QName;
 import org.apache.log4j.Logger;
 import org.opensaml.SAMLAttribute;
 import org.opensaml.SAMLException;
-import org.opensaml.XML;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
-import org.w3c.dom.Node;
 
 import edu.internet2.middleware.shibboleth.aa.arp.ArpAttribute;
 import edu.internet2.middleware.shibboleth.aa.attrresolv.ResolverAttribute;
@@ -72,8 +45,7 @@ import edu.internet2.middleware.shibboleth.aa.attrresolv.provider.ValueHandler;
 import edu.internet2.middleware.shibboleth.aa.attrresolv.provider.ValueHandlerException;
 
 /**
- * An attribute for which the Shibboleth Attribute Authority has been asked
- * to provide an assertion.
+ * An attribute for which the Shibboleth Attribute Authority has been asked to provide an assertion.
  * 
  * @author Walter Hoehn (wassa@columbia.edu)
  */
@@ -81,45 +53,45 @@ public class AAAttribute extends SAMLAttribute implements ResolverAttribute, Arp
 
        private static Logger log = Logger.getLogger(AAAttribute.class.getName());
        private boolean resolved = false;
-       
+
        public final static String SHIB_ATTRIBUTE_NAMESPACE_URI = "urn:mace:shibboleth:1.0:attributeNamespace:uri";
-       
-       /** Default lifetime, in seconds **/
+
+       /** Default lifetime, in seconds * */
        private static long defaultLifetime = 1800; // 30 minutes
        private ValueHandler valueHandler = new StringValueHandler();
 
        public AAAttribute(String name) throws SAMLException {
-               super(
-                       name,
-                       SHIB_ATTRIBUTE_NAMESPACE_URI,
-                       new QName("urn:mace:shibboleth:1.0", "AttributeValueType"),
-                       defaultLifetime,
-                       null);
+
+               super(name, SHIB_ATTRIBUTE_NAMESPACE_URI, new QName("urn:mace:shibboleth:1.0", "AttributeValueType"),
+                               defaultLifetime, null);
        }
 
        public AAAttribute(String name, Object[] values) throws SAMLException {
+
                this(name);
                setValues(values);
        }
-       
+
        public AAAttribute(String name, Object[] values, ValueHandler handler) throws SAMLException {
-                       this(name);
-                       setValues(values);
-                       registerValueHandler(handler);
-               }
+
+               this(name);
+               setValues(values);
+               registerValueHandler(handler);
+       }
 
        public boolean hasValues() {
-               if (values.isEmpty()) {
-                       return false;
-               }
+
+               if (values.isEmpty()) { return false; }
                return true;
        }
 
        public Iterator getValues() {
+
                return valueHandler.getValues(values);
        }
 
        public void setValues(Object[] values) {
+
                if (!this.values.isEmpty()) {
                        this.values.clear();
                }
@@ -131,9 +103,10 @@ public class AAAttribute extends SAMLAttribute implements ResolverAttribute, Arp
        }
 
        /**
-       * @see java.lang.Object#hashCode()
-       */
+        * @see java.lang.Object#hashCode()
+        */
        public int hashCode() {
+
                int code = 0;
                if (values != null) {
                        Iterator iterator = values.iterator();
@@ -148,6 +121,7 @@ public class AAAttribute extends SAMLAttribute implements ResolverAttribute, Arp
         * @see edu.internet2.middleware.shibboleth.aa.attrresolv.ArpAttribute#resolved()
         */
        public boolean resolved() {
+
                return resolved;
        }
 
@@ -155,6 +129,7 @@ public class AAAttribute extends SAMLAttribute implements ResolverAttribute, Arp
         * @see edu.internet2.middleware.shibboleth.aa.attrresolv.ArpAttribute#setResolved()
         */
        public void setResolved() {
+
                resolved = true;
        }
 
@@ -162,6 +137,7 @@ public class AAAttribute extends SAMLAttribute implements ResolverAttribute, Arp
         * @see edu.internet2.middleware.shibboleth.aa.attrresolv.ArpAttribute#resolveFromCached(edu.internet2.middleware.shibboleth.aa.attrresolv.ArpAttribute)
         */
        public void resolveFromCached(ResolverAttribute attribute) {
+
                resolved = true;
                setLifetime(attribute.getLifetime());
 
@@ -176,50 +152,36 @@ public class AAAttribute extends SAMLAttribute implements ResolverAttribute, Arp
        }
 
        public void setLifetime(long lifetime) {
+
                this.lifetime = lifetime;
 
        }
 
        public void addValue(Object value) {
+
                if (value != null) {
                        values.add(value);
                }
        }
 
-       /**
-        * @see org.opensaml.SAMLObject#toDOM(org.w3c.dom.Document)
+       /*
+        * @see org.opensaml.SAMLAttribute#valueToDOM(int, org.w3c.dom.Element)
         */
-       public Node toDOM(Document doc, boolean xmlns) {
-
-               Element attributeElement = doc.createElementNS(XML.SAML_NS, "Attribute");
-               attributeElement.setAttributeNS(null, "AttributeName", name);
-               attributeElement.setAttributeNS(null, "AttributeNamespace", namespace);
-
-               for (int i = 0; i < values.size(); i++) {
+       protected void valueToDOM(int index, Element e) throws SAMLException {
 
-                       if (type != null) {
-                               attributeElement.setAttributeNS(XML.XMLNS_NS, "xmlns:typens", type.getNamespaceURI());
-                       }
-                       Element valueElement = doc.createElementNS(XML.SAML_NS, "AttributeValue");
-                       if (type != null) {
-                               valueElement.setAttributeNS(XML.XSI_NS, "xsi:type", "typens:" + type.getLocalPart());
-                       }
-                       
-                       try {
-                               valueHandler.toDOM(valueElement, values.get(i), doc);
-                               attributeElement.appendChild(valueElement);
+               try {
+                       valueHandler.toDOM(e, values.get(index), e.getOwnerDocument());
 
-                       } catch (ValueHandlerException e) {
-                               log.error("Value Handler unable to convert value to DOM Node: " + e);
-                       }
+               } catch (ValueHandlerException ex) {
+                       log.error("Value Handler unable to convert value to DOM Node: " + ex);
                }
-               return attributeElement;
        }
 
        /**
         * @see edu.internet2.middleware.shibboleth.aa.attrresolv.ArpAttribute#registerValueHandler(edu.internet2.middleware.shibboleth.aa.attrresolv.provider.ValueHandler)
         */
        public void registerValueHandler(ValueHandler handler) {
+
                valueHandler = handler;
        }
 
@@ -227,6 +189,7 @@ public class AAAttribute extends SAMLAttribute implements ResolverAttribute, Arp
         * @see edu.internet2.middleware.shibboleth.aa.attrresolv.ArpAttribute#getRegisteredValueHandler()
         */
        public ValueHandler getRegisteredValueHandler() {
+
                return valueHandler;
        }
 
@@ -235,46 +198,41 @@ public class AAAttribute extends SAMLAttribute implements ResolverAttribute, Arp
         */
        public boolean equals(Object object) {
 
-               if (!(object instanceof AAAttribute)) {
-                       return false;
-               }
-               if (lifetime != ((AAAttribute) object).lifetime) {
-                       return false;
-               }
-               if (!name.equals(((AAAttribute) object).name)) {
-                       return false;
-               }
-               if (!valueHandler.equals(((AAAttribute) object).valueHandler)) {
-                       return false;
-               }
-               
+               if (!(object instanceof AAAttribute)) { return false; }
+               if (lifetime != ((AAAttribute) object).lifetime) { return false; }
+               if (!name.equals(((AAAttribute) object).name)) { return false; }
+               if (!valueHandler.equals(((AAAttribute) object).valueHandler)) { return false; }
+
                ArrayList localValues = new ArrayList();
-               for (Iterator iterator = getValues();iterator.hasNext();) {
+               for (Iterator iterator = getValues(); iterator.hasNext();) {
                        localValues.add(iterator.next());
                }
-               
+
                ArrayList objectValues = new ArrayList();
-               for (Iterator iterator = ((AAAttribute) object).getValues();iterator.hasNext();) {
+               for (Iterator iterator = ((AAAttribute) object).getValues(); iterator.hasNext();) {
                        objectValues.add(iterator.next());
                }
-               
+
                return localValues.equals(objectValues);
        }
 
 }
 
 /**
- *  Default <code>ValueHandler</code> implementation.  Expects all values to be String objects.
- *
+ * Default <code>ValueHandler</code> implementation. Expects all values to be String objects.
+ * 
  * @author Walter Hoehn (wassa@columbia.edu)
  */
+
 class StringValueHandler implements ValueHandler {
 
        public void toDOM(Element valueElement, Object value, Document document) {
+
                valueElement.appendChild(document.createTextNode(value.toString()));
        }
 
        public Iterator getValues(Collection internalValues) {
+
                return internalValues.iterator();
        }
 
@@ -282,12 +240,9 @@ class StringValueHandler implements ValueHandler {
         * @see java.lang.Object#equals(java.lang.Object)
         */
        public boolean equals(Object object) {
-               if (object instanceof StringValueHandler) {
-                       return true;
-               }
+
+               if (object instanceof StringValueHandler) { return true; }
                return false;
        }
 
 }
-
-