AMModuleProperties.java revision 8af80418ba1ec431c8027fa9668e5678658d3611
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/*
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Portions Copyrighted 2011 ForgeRock AS
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterpackage com.sun.identity.authentication.spi;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
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 Foster
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;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport javax.xml.parsers.DocumentBuilderFactory;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
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 Fosterimport com.sun.identity.shared.debug.Debug;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport com.sun.identity.shared.xml.XMLHandler;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport com.sun.identity.authentication.service.AuthD;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport com.sun.identity.authentication.share.AuthXMLTags;
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 {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster DocumentBuilderFactory factory =
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster DocumentBuilderFactory.newInstance();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster factory.setValidating(false);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster factory.setNamespaceAware(true);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster DocumentBuilder builder = factory.newDocumentBuilder();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster builder.setEntityResolver(new XMLHandler());
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 */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public static List getModuleProperties(String fileName)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster throws AuthLoginException {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster List list = (List) moduleProps.get(fileName);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster List pageAttr;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (list != null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return list;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ServletContext servletContext =
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster AuthD.getAuth().getServletContext();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster InputStream resStream = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster try {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (servletContext != null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster resStream = servletContext.getResourceAsStream(fileName);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster };
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (resStream == null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster resStream = Thread.currentThread().getContextClassLoader()
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster .getResourceAsStream(fileName.substring(1));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // remove leading '/' from fileName
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // file might be empty for modules like Cert,Anonymous etc.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (resStream !=null && resStream.read() == -1) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (debug.messageEnabled()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster debug.message(fileName + " is empty");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster list = new ArrayList();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster synchronized(moduleProps) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster moduleProps.put(fileName, list);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return list;
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);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster list = prop.getCallbacks();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (list != null && !list.isEmpty()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster synchronized(moduleProps) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster moduleProps.put(fileName, list);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return list;
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();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster int size = Integer.parseInt(getAttribute(node, "length"))
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster + 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++;
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");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (s.equals("error")) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster messageType = TextOutputCallback.ERROR;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else if (s.equals("information")) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster messageType = TextOutputCallback.INFORMATION;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else if (s.equals("warning")) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster messageType = TextOutputCallback.WARNING;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sub = node.getFirstChild();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sub = sub.getNextSibling().getFirstChild();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String value = sub.getNodeValue();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster callbacks[p] = new TextOutputCallback(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster messageType, value);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster p++;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else if (nodeName.equals("LanguageCallback")) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (sub=node.getFirstChild(); sub!=null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sub=sub.getNextSibling()
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (sub.getNodeName().equals("ChoiceValue")) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String isdefault = getAttribute(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sub, "isDefault");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster callbacks[p] = new LanguageCallback();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster p++;
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 }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster callbacks[p]=
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster new RedirectCallback(redirectUrl,redirectData,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster 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}