8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster/**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Copyright (c) 2005 Sun Microsystems Inc. All Rights Reserved
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * The contents of this file are subject to the terms
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * of the Common Development and Distribution License
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * (the License). You may not use this file except in
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * compliance with the License.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * You can obtain a copy of the License at
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * https://opensso.dev.java.net/public/CDDLv1.0.html or
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * opensso/legal/CDDLv1.0.txt
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * See the License for the specific language governing
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * permission and limitations under the License.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * When distributing Covered Code, include this CDDL
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Header Notice in each file and include the License file
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * at opensso/legal/CDDLv1.0.txt.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * If applicable, add the following below the CDDL Header,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * with the fields enclosed by brackets [] replaced by
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * your own identifying information:
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * "Portions Copyrighted [year] [name of copyright owner]"
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * $Id: AMModuleProperties.java,v 1.8 2009/05/02 22:11:28 kevinserwin Exp $
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster/*
eaee930f8fb0c2d7d86d0ca299530cfff8b1feb8Ken Stubbings * Portions Copyrighted 2011-16 ForgeRock AS
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterpackage com.sun.identity.authentication.spi;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8d703e778adaffe0f9319b3e84f9fe9741466b33Brian Baileyimport com.sun.identity.authentication.callbacks.HiddenValueCallback;
f56a278c148b90f6c2a675e0c1fa8686ca5abed4Robert Wapshottimport com.sun.identity.authentication.callbacks.ScriptTextOutputCallback;
f56a278c148b90f6c2a675e0c1fa8686ca5abed4Robert Wapshottimport com.sun.identity.authentication.service.AuthD;
f56a278c148b90f6c2a675e0c1fa8686ca5abed4Robert Wapshottimport com.sun.identity.authentication.share.AuthXMLTags;
f56a278c148b90f6c2a675e0c1fa8686ca5abed4Robert Wapshottimport com.sun.identity.shared.debug.Debug;
f56a278c148b90f6c2a675e0c1fa8686ca5abed4Robert Wapshottimport com.sun.identity.shared.xml.XMLUtils;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.io.InputStream;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.util.ArrayList;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.util.HashMap;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.util.Hashtable;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.util.List;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.util.Map;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport javax.security.auth.callback.Callback;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport javax.security.auth.callback.ChoiceCallback;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport javax.security.auth.callback.ConfirmationCallback;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport javax.security.auth.callback.LanguageCallback;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport javax.security.auth.callback.NameCallback;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport javax.security.auth.callback.PasswordCallback;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport javax.security.auth.callback.TextInputCallback;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport javax.security.auth.callback.TextOutputCallback;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport javax.servlet.ServletContext;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport javax.xml.parsers.DocumentBuilder;
eaee930f8fb0c2d7d86d0ca299530cfff8b1feb8Ken Stubbings
eaee930f8fb0c2d7d86d0ca299530cfff8b1feb8Ken Stubbingsimport org.forgerock.openam.authentication.callbacks.PollingWaitCallback;
eaee930f8fb0c2d7d86d0ca299530cfff8b1feb8Ken Stubbingsimport org.forgerock.openam.utils.CollectionUtils;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport org.w3c.dom.Attr;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport org.w3c.dom.Document;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport org.w3c.dom.NamedNodeMap;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport org.w3c.dom.Node;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterclass AMModuleProperties {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private String moduleName;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private String order;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private int p = 0; // callback of the specific pages
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private List page = new ArrayList();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private List attribute; // Attribute for each page
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private List require; // isRequire for each page
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private List<String> infoText;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private Hashtable rtable = new Hashtable();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private Callback[] callbacks = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private static Map moduleProps = new HashMap();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private static final String amAuth = "amAuth";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private static Debug debug = Debug.getInstance(amAuth);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster AMModuleProperties(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String fileName,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ServletContext servletContext
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ) throws AuthLoginException {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster InputStream in = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster try {
23e304384f98fca4ab2e6f9f07a53465c1bfc645Peter Major DocumentBuilder builder = XMLUtils.getSafeDocumentBuilder(false);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (servletContext != null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster in = servletContext.getResourceAsStream(fileName);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (in == null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster in = Thread.currentThread().getContextClassLoader()
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster .getResourceAsStream(fileName.substring(1));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // remove leading '/' from fileName
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Document doc = builder.parse(in);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster in.close();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster walk(doc);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for(int i=1; i<=rtable.size(); i++) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Callback[] cb = (Callback[]) rtable.get(Integer.toString(i));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster page.add(cb);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } catch(Exception e) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster debug.error("AMModuleProperties, parse file :" +fileName);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster debug.error("AMModuleProperties, parser error :" , e);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster throw new AuthLoginException(amAuth, "getModulePropertiesError",
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster null);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } finally {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster try {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster in.close();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } catch (Exception ee) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Return the list of page
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @return <code>List</code> of page
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private List getCallbacks() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return page;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Return the list of authentication module property
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param fileName that has module properties
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @return <code>List</code> of module property
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @exception AuthLoginException if fails to get properties from the file.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
eaee930f8fb0c2d7d86d0ca299530cfff8b1feb8Ken Stubbings public static List getModuleProperties(String fileName) throws AuthLoginException {
eaee930f8fb0c2d7d86d0ca299530cfff8b1feb8Ken Stubbings List propertiesList = (List) moduleProps.get(fileName);
eaee930f8fb0c2d7d86d0ca299530cfff8b1feb8Ken Stubbings
eaee930f8fb0c2d7d86d0ca299530cfff8b1feb8Ken Stubbings if (propertiesList != null) {
eaee930f8fb0c2d7d86d0ca299530cfff8b1feb8Ken Stubbings return propertiesList;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
eaee930f8fb0c2d7d86d0ca299530cfff8b1feb8Ken Stubbings ServletContext servletContext = AuthD.getAuth().getServletContext();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster InputStream resStream = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster try {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (servletContext != null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster resStream = servletContext.getResourceAsStream(fileName);
eaee930f8fb0c2d7d86d0ca299530cfff8b1feb8Ken Stubbings }
eaee930f8fb0c2d7d86d0ca299530cfff8b1feb8Ken Stubbings
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (resStream == null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // remove leading '/' from fileName
eaee930f8fb0c2d7d86d0ca299530cfff8b1feb8Ken Stubbings resStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName.substring(1));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // file might be empty for modules like Cert,Anonymous etc.
eaee930f8fb0c2d7d86d0ca299530cfff8b1feb8Ken Stubbings if (resStream != null && resStream.read() == -1) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (debug.messageEnabled()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster debug.message(fileName + " is empty");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
eaee930f8fb0c2d7d86d0ca299530cfff8b1feb8Ken Stubbings propertiesList = new ArrayList();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster synchronized(moduleProps) {
eaee930f8fb0c2d7d86d0ca299530cfff8b1feb8Ken Stubbings moduleProps.put(fileName, propertiesList);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
eaee930f8fb0c2d7d86d0ca299530cfff8b1feb8Ken Stubbings return propertiesList;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } catch (Exception e) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster debug.message("getModuleProperties: Error: " ,e);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } finally {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster try {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster resStream.close();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } catch (Exception ee) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster debug.message("Error closing input stream");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster AMModuleProperties prop = new AMModuleProperties(fileName,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster servletContext);
eaee930f8fb0c2d7d86d0ca299530cfff8b1feb8Ken Stubbings propertiesList = prop.getCallbacks();
eaee930f8fb0c2d7d86d0ca299530cfff8b1feb8Ken Stubbings if (CollectionUtils.isEmpty(propertiesList)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster synchronized(moduleProps) {
eaee930f8fb0c2d7d86d0ca299530cfff8b1feb8Ken Stubbings moduleProps.put(fileName, propertiesList);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
eaee930f8fb0c2d7d86d0ca299530cfff8b1feb8Ken Stubbings return propertiesList;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster //walk the DOM tree and create the callback array
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private void walk(Node node)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster int type = node.getNodeType();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String nodeName = node.getNodeName();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster debug.message("Callback type: " + nodeName);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String tmp;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Node sub;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster switch(type)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster case Node.ELEMENT_NODE:
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (nodeName.equals("ModuleProperties")) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster moduleName = getAttribute(node, "moduleName");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else if (nodeName.equals("Callbacks")) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster p = 0;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String timeout = getAttribute(node, "timeout");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String template = getAttribute(node, "template");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if(template == null){
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster template = "";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String image = getAttribute(node, "image");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if(image == null){
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster image = "";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String header = getAttribute(node, "header");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster boolean error = Boolean.valueOf(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster getAttribute(node, "error")).booleanValue();
eaee930f8fb0c2d7d86d0ca299530cfff8b1feb8Ken Stubbings int size = Integer.parseInt(getAttribute(node, "length")) + 1;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster int t=0;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (timeout!=null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster t = Integer.parseInt(timeout);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster order = getAttribute(node, "order");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster callbacks = new Callback[size];
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster callbacks[p] = new PagePropertiesCallback(moduleName,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster header, image, t, template, error, order);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster p++;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster attribute = new ArrayList();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster require = new ArrayList();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster infoText = new ArrayList<String>();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else if (nodeName.equals("NameCallback")) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sub = node.getFirstChild();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sub = sub.getNextSibling();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String prompt = sub.getFirstChild().getNodeValue();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String dftName = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sub = sub.getNextSibling().getNextSibling();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (sub != null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sub = sub.getFirstChild();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster dftName = sub.getNodeValue();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster callbacks[p] = new NameCallback(prompt, dftName);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster callbacks[p] = new NameCallback(prompt);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster tmp = getAttribute(node, "isRequired");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (tmp != null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (tmp.equals("true")) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster require.add("true");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster require.add("");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster require.add("");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster tmp = getAttribute(node, "attribute");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (tmp!=null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster attribute.add(tmp);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster attribute.add("");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster tmp = getAttribute(node, "infoText");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (tmp!=null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster infoText.add(tmp);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster infoText.add("");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster p++;
8d703e778adaffe0f9319b3e84f9fe9741466b33Brian Bailey } else if (nodeName.equals("HiddenValueCallback")) {
8d703e778adaffe0f9319b3e84f9fe9741466b33Brian Bailey sub = node.getFirstChild();
8d703e778adaffe0f9319b3e84f9fe9741466b33Brian Bailey sub = sub.getNextSibling();
8d703e778adaffe0f9319b3e84f9fe9741466b33Brian Bailey String id = sub.getFirstChild().getNodeValue();
8d703e778adaffe0f9319b3e84f9fe9741466b33Brian Bailey
8d703e778adaffe0f9319b3e84f9fe9741466b33Brian Bailey String dftName = null;
8d703e778adaffe0f9319b3e84f9fe9741466b33Brian Bailey sub = sub.getNextSibling().getNextSibling();
8d703e778adaffe0f9319b3e84f9fe9741466b33Brian Bailey if (sub != null) {
8d703e778adaffe0f9319b3e84f9fe9741466b33Brian Bailey sub = sub.getFirstChild();
8d703e778adaffe0f9319b3e84f9fe9741466b33Brian Bailey dftName = sub.getNodeValue();
8d703e778adaffe0f9319b3e84f9fe9741466b33Brian Bailey callbacks[p] = new HiddenValueCallback(id, dftName);
8d703e778adaffe0f9319b3e84f9fe9741466b33Brian Bailey } else {
8d703e778adaffe0f9319b3e84f9fe9741466b33Brian Bailey callbacks[p] = new HiddenValueCallback(id);
8d703e778adaffe0f9319b3e84f9fe9741466b33Brian Bailey }
8d703e778adaffe0f9319b3e84f9fe9741466b33Brian Bailey
8d703e778adaffe0f9319b3e84f9fe9741466b33Brian Bailey tmp = getAttribute(node, "isRequired");
8d703e778adaffe0f9319b3e84f9fe9741466b33Brian Bailey if (Boolean.parseBoolean(tmp)) {
8d703e778adaffe0f9319b3e84f9fe9741466b33Brian Bailey require.add("true");
8d703e778adaffe0f9319b3e84f9fe9741466b33Brian Bailey } else {
8d703e778adaffe0f9319b3e84f9fe9741466b33Brian Bailey require.add("");
8d703e778adaffe0f9319b3e84f9fe9741466b33Brian Bailey }
8d703e778adaffe0f9319b3e84f9fe9741466b33Brian Bailey tmp = getAttribute(node, "attribute");
8d703e778adaffe0f9319b3e84f9fe9741466b33Brian Bailey if (tmp != null) {
8d703e778adaffe0f9319b3e84f9fe9741466b33Brian Bailey attribute.add(tmp);
8d703e778adaffe0f9319b3e84f9fe9741466b33Brian Bailey } else {
8d703e778adaffe0f9319b3e84f9fe9741466b33Brian Bailey attribute.add("");
8d703e778adaffe0f9319b3e84f9fe9741466b33Brian Bailey }
8d703e778adaffe0f9319b3e84f9fe9741466b33Brian Bailey tmp = getAttribute(node, "infoText");
8d703e778adaffe0f9319b3e84f9fe9741466b33Brian Bailey if (tmp != null) {
8d703e778adaffe0f9319b3e84f9fe9741466b33Brian Bailey infoText.add(tmp);
8d703e778adaffe0f9319b3e84f9fe9741466b33Brian Bailey } else {
8d703e778adaffe0f9319b3e84f9fe9741466b33Brian Bailey infoText.add("");
8d703e778adaffe0f9319b3e84f9fe9741466b33Brian Bailey }
8d703e778adaffe0f9319b3e84f9fe9741466b33Brian Bailey p++;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else if (nodeName.equals("PasswordCallback")) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String echo = getAttribute(node, "echoPassword");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sub = node.getFirstChild();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sub = sub.getNextSibling().getFirstChild();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String prompt = sub.getNodeValue();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster boolean b = Boolean.valueOf(echo).booleanValue();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster callbacks[p] = new PasswordCallback(prompt, b);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster tmp = getAttribute(node, "isRequired");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (tmp!=null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (tmp.equals("true")) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster require.add("true");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster require.add("");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster require.add("");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster tmp = getAttribute(node, "attribute");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (tmp!=null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster attribute.add(tmp);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster attribute.add("");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster tmp = getAttribute(node, "infoText");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (tmp!=null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster infoText.add(tmp);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster infoText.add("");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster p++;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else if (nodeName.equals("ChoiceCallback")) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String multiple = getAttribute(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster node, "multipleSelectionsAllowed");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String prompt=null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String[] choices=null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster int defaultChoice=0;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster boolean mch = Boolean.valueOf(multiple).booleanValue();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (sub=node.getFirstChild(); sub!=null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sub=sub.getNextSibling()
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (sub.getNodeName().equals("Prompt")) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster prompt = sub.getFirstChild().getNodeValue();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else if (sub.getNodeName().equals("ChoiceValues")
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster int len = 0;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Node ss = sub.getFirstChild().getNextSibling();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (Node count=ss; count!=null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster count=count.getNextSibling()
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster .getNextSibling()
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster len++;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster choices = new String[len];
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for(int i=0; i<len; i++) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster choices[i] = ss.getFirstChild().
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster getNextSibling().getFirstChild().
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster getNodeValue();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (Boolean.valueOf(getAttribute(ss,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster "isDefault")).booleanValue()
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster defaultChoice = i;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ss = ss.getNextSibling().getNextSibling();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster break;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster callbacks[p] = new ChoiceCallback(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster prompt, choices, defaultChoice, mch);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster tmp = getAttribute(node, "isRequired");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (tmp!=null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (tmp.equals("true")) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster require.add("true");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster require.add("");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster require.add("");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster tmp = getAttribute(node, "attribute");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (tmp!=null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster attribute.add(tmp);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster attribute.add("");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster tmp = getAttribute(node, "infoText");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (tmp!=null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster infoText.add(tmp);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster infoText.add("");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster p++;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else if (nodeName.equals("ConfirmationCallback")) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster int messageType = ConfirmationCallback.INFORMATION;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster int defaultOption = 0;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String[] options = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (sub=node.getFirstChild(); sub!=null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sub=sub.getNextSibling()
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (sub.getNodeName().equals("OptionValues")) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster int len = 0;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Node ss = sub.getFirstChild().getNextSibling();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (Node count=ss; count!=null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster count=count.getNextSibling()
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster .getNextSibling()
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster len++;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster options = new String[len];
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for(int i=0; i<len; i++) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster options[i] = ss.getFirstChild()
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster .getNextSibling().getFirstChild().
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster getNodeValue();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ss = ss.getNextSibling().getNextSibling();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster break;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster callbacks[p] = new ConfirmationCallback(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster messageType, options, defaultOption);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster p++;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else if (nodeName.equals("TextInputCallback")) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sub = node.getFirstChild();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sub = sub.getNextSibling().getFirstChild();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String prompt = sub.getNodeValue();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster callbacks[p] = new TextInputCallback(prompt);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster p++;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else if (nodeName.equals("TextOutputCallback")) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster int messageType = TextOutputCallback.ERROR;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String s = getAttribute(node, "messageType");
f56a278c148b90f6c2a675e0c1fa8686ca5abed4Robert Wapshott String value = node.getFirstChild().getNodeValue();
f56a278c148b90f6c2a675e0c1fa8686ca5abed4Robert Wapshott
f56a278c148b90f6c2a675e0c1fa8686ca5abed4Robert Wapshott
f56a278c148b90f6c2a675e0c1fa8686ca5abed4Robert Wapshott if (s.equals("script")) {
f56a278c148b90f6c2a675e0c1fa8686ca5abed4Robert Wapshott callbacks[p] = new ScriptTextOutputCallback(value);
f56a278c148b90f6c2a675e0c1fa8686ca5abed4Robert Wapshott } else {
f56a278c148b90f6c2a675e0c1fa8686ca5abed4Robert Wapshott if (s.equals("error")) {
f56a278c148b90f6c2a675e0c1fa8686ca5abed4Robert Wapshott messageType = TextOutputCallback.ERROR;
f56a278c148b90f6c2a675e0c1fa8686ca5abed4Robert Wapshott } else if (s.equals("warning")) {
f56a278c148b90f6c2a675e0c1fa8686ca5abed4Robert Wapshott messageType = TextOutputCallback.WARNING;
f56a278c148b90f6c2a675e0c1fa8686ca5abed4Robert Wapshott } else { //default to information
f56a278c148b90f6c2a675e0c1fa8686ca5abed4Robert Wapshott messageType = TextOutputCallback.INFORMATION;
f56a278c148b90f6c2a675e0c1fa8686ca5abed4Robert Wapshott }
f56a278c148b90f6c2a675e0c1fa8686ca5abed4Robert Wapshott
f56a278c148b90f6c2a675e0c1fa8686ca5abed4Robert Wapshott callbacks[p] = new TextOutputCallback(messageType, value);
f56a278c148b90f6c2a675e0c1fa8686ca5abed4Robert Wapshott
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
f56a278c148b90f6c2a675e0c1fa8686ca5abed4Robert Wapshott
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster p++;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else if (nodeName.equals("LanguageCallback")) {
eaee930f8fb0c2d7d86d0ca299530cfff8b1feb8Ken Stubbings for (sub = node.getFirstChild(); sub != null; sub = sub.getNextSibling()) {
eaee930f8fb0c2d7d86d0ca299530cfff8b1feb8Ken Stubbings if (sub.getNodeName().equals("ChoiceValue")) {
eaee930f8fb0c2d7d86d0ca299530cfff8b1feb8Ken Stubbings String isdefault = getAttribute(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sub, "isDefault");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
eaee930f8fb0c2d7d86d0ca299530cfff8b1feb8Ken Stubbings }
eaee930f8fb0c2d7d86d0ca299530cfff8b1feb8Ken Stubbings callbacks[p] = new LanguageCallback();
eaee930f8fb0c2d7d86d0ca299530cfff8b1feb8Ken Stubbings p++;
eaee930f8fb0c2d7d86d0ca299530cfff8b1feb8Ken Stubbings } else if (PollingWaitCallback.NODE_NAME.equals(nodeName)) {
eaee930f8fb0c2d7d86d0ca299530cfff8b1feb8Ken Stubbings callbacks[p++] = PollingWaitCallback.makeCallback()
eaee930f8fb0c2d7d86d0ca299530cfff8b1feb8Ken Stubbings .withWaitTime(getAttribute(node, "waitTime"))
eaee930f8fb0c2d7d86d0ca299530cfff8b1feb8Ken Stubbings .build();
eaee930f8fb0c2d7d86d0ca299530cfff8b1feb8Ken Stubbings
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else if (nodeName.equals(AuthXMLTags.HTTP_CALLBACK)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String header = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String negotiation = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String code = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sub = node.getFirstChild();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (; sub!=null; sub=sub.getNextSibling()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String tmpStr = sub.getNodeName();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (tmpStr.equals(AuthXMLTags.HTTP_HEADER)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster header = sub.getFirstChild().getNodeValue();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else if (tmpStr.equals(AuthXMLTags.HTTP_NEGO)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster negotiation= sub.getFirstChild().getNodeValue();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else if (tmpStr.equals(AuthXMLTags.HTTP_CODE)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster code = sub.getFirstChild().getNodeValue();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster callbacks[p]= new HttpCallback(header,negotiation,code);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster p++;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else if (nodeName.equals(AuthXMLTags.REDIRECT_CALLBACK)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String redirectUrl = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String statusParameter = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String redirectBackUrlCookie = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Map redirectData = new HashMap();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String method =
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster getAttribute(node, AuthXMLTags.REDIRECT_METHOD);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sub = node.getFirstChild();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (; sub!=null; sub=sub.getNextSibling()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String tmpStr = sub.getNodeName();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (tmpStr.equals(AuthXMLTags.REDIRECT_URL)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster redirectUrl =
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sub.getFirstChild().getNodeValue();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else if (tmpStr.equals(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster AuthXMLTags.REDIRECT_STATUS_PARAM)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster statusParameter =
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sub.getFirstChild().getNodeValue();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else if (tmpStr.equals(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster AuthXMLTags.REDIRECT_BACK_URL_COOKIE)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster redirectBackUrlCookie =
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sub.getFirstChild().getNodeValue();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else if (tmpStr.equals(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster AuthXMLTags.REDIRECT_DATA)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String name = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String value = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Node ss = sub.getFirstChild().getNextSibling();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String tmpStrName = ss.getNodeName();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (tmpStrName.equals("Name")) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster name = ss.getFirstChild().getNodeValue();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ss = ss.getNextSibling().getNextSibling();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String tmpStrValue = ss.getNodeName();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (tmpStrValue.equals("Value")) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster value = ss.getFirstChild().getNodeValue();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster redirectData.put(name,value);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (debug.messageEnabled()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster debug.message("redirectUrl : " + redirectUrl);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster debug.message("statusParameter : "
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster + statusParameter);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster debug.message("redirectBackUrlCookie : "
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster + redirectBackUrlCookie);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster debug.message("redirectData : " + redirectData);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster debug.message("method : " + method);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
eaee930f8fb0c2d7d86d0ca299530cfff8b1feb8Ken Stubbings callbacks[p]= new RedirectCallback(redirectUrl, redirectData, method);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster p++;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster break;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }//end of element
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster default:
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster break;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }//end of switch
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster //recurse
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (Node child = node.getFirstChild(); child != null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster child = child.getNextSibling()
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster walk(child);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster //without this the ending tags will miss
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if ( type == Node.ELEMENT_NODE )
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (nodeName.equals("Callbacks")) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ((PagePropertiesCallback) callbacks[0]).setAttribute(attribute);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ((PagePropertiesCallback) callbacks[0]).setRequire(require);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ((PagePropertiesCallback) callbacks[0]).setInfoText(infoText);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster rtable.put(order, callbacks);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster //attrtable.put(order, subAttr);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster //requiretable.put(order, subRequire);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }//end of walk
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private String getAttribute(Node node, String name) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster NamedNodeMap nnm = node.getAttributes();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if(nnm != null ) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster int len = nnm.getLength() ;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Attr attr;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for ( int i = 0; i < len; i++ ) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster attr = (Attr)nnm.item(i);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (attr.getNodeName().equals(name)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return attr.getNodeValue();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster}