/** * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright (c) 2006 Sun Microsystems Inc. All Rights Reserved * * The contents of this file are subject to the terms * of the Common Development and Distribution License * (the License). You may not use this file except in * compliance with the License. * * You can obtain a copy of the License at * https://opensso.dev.java.net/public/CDDLv1.0.html or * opensso/legal/CDDLv1.0.txt * See the License for the specific language governing * permission and limitations under the License. * * When distributing Covered Code, include this CDDL * Header Notice in each file and include the License file * at opensso/legal/CDDLv1.0.txt. * If applicable, add the following below the CDDL Header, * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * * $Id: Directive.java,v 1.2 2008/06/25 05:47:10 qcheng Exp $ * */ package com.sun.identity.liberty.ws.disco; import java.util.Iterator; import java.util.List; import java.util.ArrayList; import java.util.StringTokenizer; import org.w3c.dom.Element; import com.sun.identity.liberty.ws.disco.common.DiscoConstants; import com.sun.identity.liberty.ws.disco.common.DiscoUtils; /** * The class Directive represents a discovery service * DirectiveType element. Current implementation supports the * following four directive types: AUTHENTICATE_REQUESTER, * AUTHORIZE_REQUESTER, AUTHENTICATE_SESSION_CONTEXT, * and ENCRYPT_RESOURCEID. *

* The following schema fragment specifies the expected content within the * DirectiveType object. *

 * <complexType name="DirectiveType">
 *   <complexContent>
 *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *       <attribute name="descriptionIDRefs" type="{http://www.w3.org/2001/XMLSchema}IDREFS" />
 *     </restriction>
 *   </complexContent>
 * </complexType>
 * 
* * @supported.all.api */ public class Directive { /** * DirectiveType AuthenticateRequester. */ public static final String AUTHENTICATE_REQUESTER = "AuthenticateRequester"; /** * DirectiveType AuthorizeRequester. */ public static final String AUTHORIZE_REQUESTER = "AuthorizeRequester"; /** * DirectiveType AuthenticateSessionContext. */ public static final String AUTHENTICATE_SESSION_CONTEXT = "AuthenticateSessionContext"; /** * DirectiveType EncryptResourceID. */ public static final String ENCRYPT_RESOURCEID = "EncryptResourceID"; /** * DirectiveType GenerateBearerToken. */ public static final String GENERATE_BEARER_TOKEN = "GenerateBearerToken"; private String type = null; private List descIDRefs = null; /** * Constructs a directive instance for a type of directive. * @param directiveType Type of the directive. */ public Directive(String directiveType) { type = directiveType; } /** * Constructs a directive instance from DOM element. * @param elem DirectiveType DOM element. * @exception DiscoveryException if error occurs. */ public Directive(Element elem) throws DiscoveryException { String tag = null; if (elem == null) { DiscoUtils.debug.message("Directive(Element): null input."); throw new DiscoveryException( DiscoUtils.bundle.getString("nullInput")); } if ((tag = elem.getLocalName()) == null) { DiscoUtils.debug.message("Directive(Element): wrong input"); throw new DiscoveryException( DiscoUtils.bundle.getString("wrongInput")); } if (tag.equals(AUTHENTICATE_REQUESTER)) { type = AUTHENTICATE_REQUESTER; setDescIDRefs(elem); } else if (tag.equals(AUTHORIZE_REQUESTER)) { type = AUTHORIZE_REQUESTER; setDescIDRefs(elem); } else if (tag.equals(AUTHENTICATE_SESSION_CONTEXT)) { type = AUTHENTICATE_SESSION_CONTEXT; setDescIDRefs(elem); } else if (tag.equals(ENCRYPT_RESOURCEID)) { type = ENCRYPT_RESOURCEID; setDescIDRefs(elem); } else if (tag.equals(GENERATE_BEARER_TOKEN)) { type = GENERATE_BEARER_TOKEN; setDescIDRefs(elem); } else { if (DiscoUtils.debug.messageEnabled()) { DiscoUtils.debug.message("Directive(Element): not supported:" + tag); } throw new DiscoveryException( DiscoUtils.bundle.getString("directiveNotSupported")); } } private void setDescIDRefs(Element elem) { String ids = elem.getAttribute("descriptionIDRefs"); if ((ids != null) && (ids.length() != 0)) { StringTokenizer st = new StringTokenizer(ids); if (st.countTokens() > 0) { if (descIDRefs == null) { descIDRefs = new ArrayList(); } while (st.hasMoreTokens()) { descIDRefs.add(st.nextToken()); } } } } /** * Returns a list of description ID references. * @return a list of description ID references. * @see #setDescriptionIDRef(List) */ public List getDescriptionIDRef() { return descIDRefs; } /** * Sets a list of description ID references. * @param idrefs a list of description ID references to be set. * @see #getDescriptionIDRef() */ public void setDescriptionIDRef(List idrefs) { descIDRefs = idrefs; } /** * Returns type of directive. * @return type of directive. * @see #setDirectiveType(String) */ public String getDirectiveType() { return type; } /** * Sets type of the directive. * @param directiveType type of the directive to be set. * @see #getDirectiveType() */ public void setDirectiveType(String directiveType) { type = directiveType; } /** * Returns the directive object in string format. * @return the directive object in string format. */ public String toString() { String ns = null; if (type.equals(GENERATE_BEARER_TOKEN)) { ns = DiscoConstants.DISCO11_NS; } else { ns = DiscoConstants.DISCO_NS; } StringBuffer sb = new StringBuffer(300); sb.append("<").append(type).append(" xmlns=\""). append(ns).append("\""); if (descIDRefs != null) { sb.append(" descriptionIDRefs=\""); Iterator iter = descIDRefs.iterator(); if (iter.hasNext()) { sb.append((String) iter.next()); } while (iter.hasNext()) { sb.append(" ").append((String) iter.next()); } sb.append("\""); } sb.append(">"); sb.append(""); return sb.toString(); } }