craigmcc    02/03/08 16:10:57

  Modified:    webapps/admin connector.jsp context.jsp
               webapps/admin/WEB-INF/classes/org/apache/webapp/admin
                        Lists.java TomcatTreeBuilder.java
               webapps/admin/WEB-INF/classes/org/apache/webapp/admin/connector
                        ConnectorForm.java SetUpConnectorAction.java
               webapps/admin/WEB-INF/classes/org/apache/webapp/admin/context
                        ContextForm.java
               webapps/admin/WEB-INF/classes/org/apache/webapp/admin/logger
                        SetUpLoggerAction.java
               webapps/admin/host host.jsp
  Log:
  Refactor logic that builds the tree control to use the common list building
  methods.
  
  Make key properties read-only on edit screens.
  
  Tweak validation rules to match the values that are actually supported.
  
  Revision  Changes    Path
  1.4       +14 -0     jakarta-tomcat-4.0/webapps/admin/connector.jsp
  
  Index: connector.jsp
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-4.0/webapps/admin/connector.jsp,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- connector.jsp     13 Feb 2002 00:03:32 -0000      1.3
  +++ connector.jsp     9 Mar 2002 00:10:56 -0000       1.4
  @@ -106,7 +106,12 @@
           <controls:row labelStyle="table-label-text" dataStyle="table-normal-text">
               <controls:label><bean:message 
key="connector.address.ip"/>:</controls:label>
               <controls:data>
  +<%-- FIXME - input only allowed on create transaction --%>
  +<%--
                  <html:text property="address" size="20"/>    
  +--%>
  +               <bean:write name="connectorForm" property="address"/>
  +               <html:hidden property="address"/>
               </controls:data>
           </controls:row>
    
  @@ -118,7 +123,12 @@
           <controls:row labelStyle="table-label-text" dataStyle="table-normal-text">
               <controls:label><bean:message 
key="server.portnumber"/>:</controls:label>
               <controls:data>
  +<%-- FIXME - input only allowed on create transaction --%>
  +<%--
                  <html:text property="portText" size="5"/> 
  +--%>
  +               <bean:write name="connectorForm" property="portText"/>
  +               <html:hidden property="portText"/>
               </controls:data>
           </controls:row>
   
  @@ -148,6 +158,9 @@
               </controls:data>
           </controls:row>
   
  +<%-- FIXME - The proxyName and proxyPort properties not supported   --%>
  +<%--         on all connectors, so comment this section out for now --%>
  +<%--
           <controls:row header="true" labelStyle="table-header-text" 
dataStyle="table-header-text">
               <controls:label>Proxy</controls:label>
               <controls:data>&nbsp;</controls:data>
  @@ -166,6 +179,7 @@
                   <html:text property="proxyPortText" size="5"/> 
               </controls:data>
           </controls:row>
  +--%>
         </controls:table>
     
         </td>
  
  
  
  1.5       +15 -0     jakarta-tomcat-4.0/webapps/admin/context.jsp
  
  Index: context.jsp
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-4.0/webapps/admin/context.jsp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- context.jsp       13 Feb 2002 00:03:32 -0000      1.4
  +++ context.jsp       9 Mar 2002 00:10:56 -0000       1.5
  @@ -109,7 +109,12 @@
          <controls:row labelStyle="table-label-text" dataStyle="table-normal-text">
               <controls:label><bean:message key="context.docBase"/>:</controls:label>
               <controls:data>
  +<%-- FIXME - input only allowed on create transaction --%>
  +<%--
                  <html:text property="docBase" size="30"/>
  +--%>
  +               <bean:write name="contextForm" property="docBase"/>
  +               <html:hidden property="docBase"/>
               </controls:data>
           </controls:row>
   
  @@ -128,7 +133,12 @@
          <controls:row labelStyle="table-label-text" dataStyle="table-normal-text">
               <controls:label><bean:message key="context.path"/>:</controls:label>
               <controls:data>
  +<%-- FIXME - input only allowed on create transaction --%>
  +<%--
                  <html:text property="path" size="30"/>
  +--%>
  +               <bean:write name="contextForm" property="path"/>
  +               <html:hidden property="path"/>
               </controls:data>
           </controls:row>
   
  @@ -157,7 +167,12 @@
          <controls:row labelStyle="table-label-text" dataStyle="table-normal-text">
               <controls:label><bean:message key="context.workdir"/>:</controls:label>
               <controls:data>
  +<%-- FIXME - input only allowed on create transaction --%>
  +<%--
                  <html:text property="workDir" size="30"/>
  +--%>
  +               <bean:write name="contextForm" property="workDir"/>
  +               <html:hidden property="workDir"/>
               </controls:data>
           </controls:row>
      </controls:table>
  
  
  
  1.2       +203 -4    
jakarta-tomcat-4.0/webapps/admin/WEB-INF/classes/org/apache/webapp/admin/Lists.java
  
  Index: Lists.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/webapps/admin/WEB-INF/classes/org/apache/webapp/admin/Lists.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Lists.java        8 Mar 2002 00:12:29 -0000       1.1
  +++ Lists.java        9 Mar 2002 00:10:56 -0000       1.2
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.0/webapps/admin/WEB-INF/classes/org/apache/webapp/admin/Lists.java,v
 1.1 2002/03/08 00:12:29 craigmcc Exp $
  - * $Revision: 1.1 $
  - * $Date: 2002/03/08 00:12:29 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.0/webapps/admin/WEB-INF/classes/org/apache/webapp/admin/Lists.java,v
 1.2 2002/03/09 00:10:56 craigmcc Exp $
  + * $Revision: 1.2 $
  + * $Date: 2002/03/09 00:10:56 $
    *
    * ====================================================================
    *
  @@ -77,7 +77,7 @@
    * is returned.
    *
    * @author Craig R. McClanahan
  - * @version $Revision: 1.1 $ $Date: 2002/03/08 00:12:29 $
  + * @version $Revision: 1.2 $ $Date: 2002/03/09 00:10:56 $
    */
   
   public class Lists {
  @@ -261,6 +261,205 @@
           throws Exception {
   
           return (getHosts(mbserver, new ObjectName(service)));
  +
  +    }
  +
  +
  +    /**
  +     * Return a list of <code>Logger</code> object name strings
  +     * for the specified container (service, host, or context) object name.
  +     *
  +     * @param mbserver MBeanServer from which to retrieve the list
  +     * @param container Object name of the container for which to select
  +     *                  loggers
  +     *
  +     * @exception Exception if thrown while retrieving the list
  +     */
  +    public static List getLoggers(MBeanServer mbserver, ObjectName container)
  +        throws Exception {
  +
  +        StringBuffer sb = new StringBuffer(container.getDomain());
  +        sb.append(":type=Logger");
  +        String type = container.getKeyProperty("type");
  +        String path = container.getKeyProperty("path");
  +        if (path != null) {
  +            sb.append(",path=");
  +            sb.append(path);
  +        }
  +        String host = container.getKeyProperty("host");
  +        if ("Host".equals(type)) {
  +            host = container.getKeyProperty("name");
  +        }
  +        if (host != null) {
  +            sb.append(",host=");
  +            sb.append(host);
  +        }
  +        String service = container.getKeyProperty("service");
  +        if ("Service".equals(type)) {
  +            service = container.getKeyProperty("name");
  +        }
  +        if (service != null) {
  +            sb.append(",service=");
  +            sb.append(service);
  +        }
  +        ObjectName search = new ObjectName(sb.toString());
  +        ArrayList loggers = new ArrayList();
  +        Iterator names = mbserver.queryNames(search, null).iterator();
  +        while (names.hasNext()) {
  +            loggers.add(names.next().toString());
  +        }
  +        Collections.sort(loggers);
  +        return (loggers);
  +
  +    }
  +
  +
  +    /**
  +     * Return a list of <code>Logger</code> object name strings
  +     * for the specified container (service, host, or context) object name.
  +     *
  +     * @param mbserver MBeanServer from which to retrieve the list
  +     * @param container Object name of the container for which to select
  +     *                  loggers
  +     *
  +     * @exception Exception if thrown while retrieving the list
  +     */
  +    public static List getLoggers(MBeanServer mbserver, String container)
  +        throws Exception {
  +
  +        return (getLoggers(mbserver, new ObjectName(container)));
  +
  +    }
  +
  +
  +    /**
  +     * Return a list of <code>Realm</code> object name strings
  +     * for the specified container (service, host, or context) object name.
  +     *
  +     * @param mbserver MBeanServer from which to retrieve the list
  +     * @param container Object name of the container for which to select
  +     *                  realms
  +     *
  +     * @exception Exception if thrown while retrieving the list
  +     */
  +    public static List getRealms(MBeanServer mbserver, ObjectName container)
  +        throws Exception {
  +
  +        StringBuffer sb = new StringBuffer(container.getDomain());
  +        sb.append(":type=Realm");
  +        String type = container.getKeyProperty("type");
  +        String path = container.getKeyProperty("path");
  +        if (path != null) {
  +            sb.append(",path=");
  +            sb.append(path);
  +        }
  +        String host = container.getKeyProperty("host");
  +        if ("Host".equals(type)) {
  +            host = container.getKeyProperty("name");
  +        }
  +        if (host != null) {
  +            sb.append(",host=");
  +            sb.append(host);
  +        }
  +        String service = container.getKeyProperty("service");
  +        if ("Service".equals(type)) {
  +            service = container.getKeyProperty("name");
  +        }
  +        if (service != null) {
  +            sb.append(",service=");
  +            sb.append(service);
  +        }
  +        ObjectName search = new ObjectName(sb.toString());
  +        ArrayList realms = new ArrayList();
  +        Iterator names = mbserver.queryNames(search, null).iterator();
  +        while (names.hasNext()) {
  +            realms.add(names.next().toString());
  +        }
  +        Collections.sort(realms);
  +        return (realms);
  +
  +    }
  +
  +
  +    /**
  +     * Return a list of <code>Realm</code> object name strings
  +     * for the specified container (service, host, or context) object name.
  +     *
  +     * @param mbserver MBeanServer from which to retrieve the list
  +     * @param container Object name of the container for which to select
  +     *                  realms
  +     *
  +     * @exception Exception if thrown while retrieving the list
  +     */
  +    public static List getRealms(MBeanServer mbserver, String container)
  +        throws Exception {
  +
  +        return (getRealms(mbserver, new ObjectName(container)));
  +
  +    }
  +
  +
  +    /**
  +     * Return a list of <code>Server</code> object name strings.
  +     *
  +     * @param mbserver MBeanServer from which to retrieve the list
  +     *
  +     * @exception Exception if thrown while retrieving the list
  +     */
  +    public static List getServers(MBeanServer mbserver)
  +        throws Exception {
  +
  +        ObjectName search = new ObjectName("Catalina:type=Server,*");
  +        ArrayList servers = new ArrayList();
  +        Iterator names = mbserver.queryNames(search, null).iterator();
  +        while (names.hasNext()) {
  +            servers.add(names.next().toString());
  +        }
  +        Collections.sort(servers);
  +        return (servers);
  +
  +    }
  +
  +
  +    /**
  +     * Return a list of <code>Service</code> object name strings
  +     * for the specified <code>Server</code> object name.
  +     *
  +     * @param mbserver MBeanServer from which to retrieve the list
  +     * @param server Object name of the server for which to select services
  +     *
  +     * @exception Exception if thrown while retrieving the list
  +     */
  +    public static List getServices(MBeanServer mbserver, ObjectName server)
  +        throws Exception {
  +
  +        StringBuffer sb = new StringBuffer(server.getDomain());
  +        sb.append(":type=Service,*");
  +        ObjectName search = new ObjectName(sb.toString());
  +        ArrayList services = new ArrayList();
  +        Iterator names = mbserver.queryNames(search, null).iterator();
  +        while (names.hasNext()) {
  +            services.add(names.next().toString());
  +        }
  +        Collections.sort(services);
  +        return (services);
  +
  +    }
  +
  +
  +    /**
  +     * Return a list of <code>Service</code> object name strings
  +     * for the specified <code>Server</code> object name.
  +     *
  +     * @param mbserver MBeanServer from which to retrieve the list
  +     * @param server Object name of the server for which to select services
  +     *
  +     * @exception Exception if thrown while retrieving the list
  +     */
  +    public static List getServices(MBeanServer mbserver, String server)
  +        throws Exception {
  +
  +        return (getServices(mbserver, new ObjectName(server)));
   
       }
   
  
  
  
  1.18      +214 -317  
jakarta-tomcat-4.0/webapps/admin/WEB-INF/classes/org/apache/webapp/admin/TomcatTreeBuilder.java
  
  Index: TomcatTreeBuilder.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/webapps/admin/WEB-INF/classes/org/apache/webapp/admin/TomcatTreeBuilder.java,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- TomcatTreeBuilder.java    6 Mar 2002 06:49:11 -0000       1.17
  +++ TomcatTreeBuilder.java    9 Mar 2002 00:10:56 -0000       1.18
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.0/webapps/admin/WEB-INF/classes/org/apache/webapp/admin/TomcatTreeBuilder.java,v
 1.17 2002/03/06 06:49:11 craigmcc Exp $
  - * $Revision: 1.17 $
  - * $Date: 2002/03/06 06:49:11 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.0/webapps/admin/WEB-INF/classes/org/apache/webapp/admin/TomcatTreeBuilder.java,v
 1.18 2002/03/09 00:10:56 craigmcc Exp $
  + * $Revision: 1.18 $
  + * $Date: 2002/03/09 00:10:56 $
    *
    * ====================================================================
    *
  @@ -96,7 +96,7 @@
    *
    * @author Jazmin Jonson
    * @author Manveen Kaur
  - * @version $Revision: 1.17 $ $Date: 2002/03/06 06:49:11 $
  + * @version $Revision: 1.18 $ $Date: 2002/03/09 00:10:56 $
    */
   
   
  @@ -122,18 +122,17 @@
       private static MBeanServer mBServer = null;
       
       public void buildTree(TreeControl treeControl,
  -    ApplicationServlet servlet,
  -    HttpServletRequest request) {
  -        
  +                          ApplicationServlet servlet,
  +                          HttpServletRequest request) {
  +
           try {
               mBServer = servlet.getServer();
               TreeControlNode root = treeControl.getRoot();
  -            TreeControlNode server = getServer();
  -            root.addChild(server);
  -            getServices(server);
  -        }catch(Throwable t){
  +            getServers(root);
  +        } catch(Throwable t){
               t.printStackTrace(System.out);
           }
  +
       }
       
       public static ObjectInstance getMBeanFactory()
  @@ -146,351 +145,249 @@
           return mBeanFactory;
       }
       
  -    public TreeControlNode getServer()
  -    throws JMException, ServletException {
  -        
  -        Iterator serverItr =
  -        mBServer.queryMBeans(new ObjectName(SERVER_TYPE + WILDCARD),
  -        null).iterator();
  -        String serverObjName =
  -        (((ObjectInstance)serverItr.next()).getObjectName()).toString();
  -        
  -        // HACK to take into account special characters like = and &
  -        // in the node name, could remove this code if encode URL
  -        // and later request.getParameter() could deal with = and &
  -        // character in parameter values. Decoding name not needed
  -        // because Tomcat does this automatically
  -        
  -        String encodedServerName =  URLEncoder.encode(serverObjName);
  -        String encodedNodeLabel =  URLEncoder.encode(SERVER_LABEL);
  -        
  -        TreeControlNode serverNode =
  -        new TreeControlNode(serverObjName,
  -        "folder_16_pad.gif", SERVER_LABEL,
  -        "setUpServer.do?select=" + encodedServerName
  -        +"&nodeLabel=" + encodedNodeLabel,
  -        "content", true);
  +
  +    /**
  +     * Append nodes for all defined servers.
  +     *
  +     * @param rootNode Root node for the tree control
  +     *
  +     * @exception Exception if an exception occurs building the tree
  +     */
  +    public void getServers(TreeControlNode rootNode)
  +        throws Exception {
           
  -        return serverNode;
  +        Iterator serverNames =
  +            Lists.getServers(mBServer).iterator();
  +        while (serverNames.hasNext()) {
  +            String serverName = (String) serverNames.next();
  +            ObjectName objectName = new ObjectName(serverName);
  +            String nodeLabel = SERVER_LABEL;
  +            TreeControlNode serverNode =
  +                new TreeControlNode(serverName,
  +                                    "folder_16_pad.gif",
  +                                    nodeLabel,
  +                                    "setUpServer.do?select=" +
  +                                    URLEncoder.encode(serverName) +
  +                                    "&nodeLabel=" +
  +                                    URLEncoder.encode(nodeLabel),
  +                                    "content",
  +                                    true);
  +            rootNode.addChild(serverNode);
  +            getServices(serverNode, serverName);
  +        }
           
       }
       
  -    public void getServices(TreeControlNode serverNode)
  -    throws JMException, ServletException {
  -        
  -        Iterator serviceItr =
  -        mBServer.queryMBeans(new ObjectName(SERVICE_TYPE + WILDCARD) ,
  -        null).iterator();
  -        
  -        String encodedServiceName;
  -        
  -        while(serviceItr.hasNext()){
  -            ObjectInstance service = (ObjectInstance)serviceItr.next();
  -            
  -            String serviceName =
  -            (String)mBServer.getAttribute(service.getObjectName(),"name");
  -            
  -            // HACK to take into account special characters like = and &
  -            // in the node name, could remove this code if encode URL
  -            // and later request.getParameter() could deal with = and &
  -            // character in parameter values. Decoding name not needed
  -            // because Tomcat does this automatically
  -            
  -            encodedServiceName =  
URLEncoder.encode(service.getObjectName().toString());
  -            
  -            String nodeLabel = "Service (" + serviceName + ")";
  -            String encodedNodeLabel =  URLEncoder.encode(nodeLabel);
  -            
  +
  +    /**
  +     * Append nodes for all defined services for the specified server.
  +     *
  +     * @param serverNode Server node for the tree control
  +     * @param serverName Object name of the parent server
  +     *
  +     * @exception Exception if an exception occurs building the tree
  +     */
  +    public void getServices(TreeControlNode serverNode, String serverName)
  +        throws Exception {
  +
  +        Iterator serviceNames =
  +            Lists.getServices(mBServer, serverName).iterator();
  +        while (serviceNames.hasNext()) {
  +            String serviceName = (String) serviceNames.next();
  +            ObjectName objectName = new ObjectName(serviceName);
  +            String nodeLabel =
  +                "Service (" + objectName.getKeyProperty("name") + ")";
               TreeControlNode serviceNode =
  -            new TreeControlNode(service.getObjectName().toString(),
  -            "folder_16_pad.gif",
  -            nodeLabel,
  -            "EditService.do?select=" + encodedServiceName
  -            +"&nodeLabel=" + encodedNodeLabel,
  -            "content", true);
  -            
  +                new TreeControlNode(serviceName,
  +                                    "folder_16_pad.gif",
  +                                    nodeLabel,
  +                                    "EditService.do?select=" +
  +                                    URLEncoder.encode(serviceName) +
  +                                    "&nodeLabel=" +
  +                                    URLEncoder.encode(nodeLabel),
  +                                    "content",
  +                                    true);
               serverNode.addChild(serviceNode);
  -            
               getConnectors(serviceNode, serviceName);
               getHosts(serviceNode, serviceName);
  -            getLoggers(serviceNode, serviceName, null, null, 0);
  -            getRealms(serviceNode, serviceName, null, null, 0);
  +            getLoggers(serviceNode, serviceName);
  +            getRealms(serviceNode, serviceName);
           }
  +
       }
       
  +
  +    /**
  +     * Append nodes for all defined connectors for the specified service.
  +     *
  +     * @param serviceNode Service node for the tree control
  +     * @param serviceName Object name of the parent service
  +     *
  +     * @exception Exception if an exception occurs building the tree
  +     */
       public void getConnectors(TreeControlNode serviceNode, String serviceName)
  -    throws JMException{
  -        
  -        Iterator ConnectorItr =
  -        (mBServer.queryMBeans(new ObjectName(CONNECTOR_TYPE + WILDCARD +
  -        ",service=" + serviceName),
  -        null)).iterator();
  -        
  -        TreeControlNode connectorNode = null;
  -        String encodedConnectorName;
  +        throws Exception{
           
  -        while(ConnectorItr.hasNext()){
  -            
  -            ObjectInstance connectorObj = (ObjectInstance)ConnectorItr.next();
  -            
  -            String connectorName =
  -            (String)mBServer.getAttribute(connectorObj.getObjectName(),
  -            "scheme");
  -            
  -            encodedConnectorName =  
URLEncoder.encode(connectorObj.getObjectName().toString());
  -            
  -            String nodeLabel = "Connector (" + connectorName + ")";
  -            String encodedNodeLabel =  URLEncoder.encode(nodeLabel);
  -            
  -            connectorNode =
  -            new TreeControlNode(connectorObj.getObjectName().toString(),
  -            "folder_16_pad.gif",
  -            nodeLabel,
  -            "setUpConnector.do?select=" + encodedConnectorName
  -            + "&nodeLabel="+ encodedNodeLabel,
  -            "content", true);
  -            
  +        Iterator connectorNames =
  +            Lists.getConnectors(mBServer, serviceName).iterator();
  +        while (connectorNames.hasNext()) {
  +            String connectorName = (String) connectorNames.next();
  +            ObjectName objectName = new ObjectName(connectorName);
  +            String nodeLabel =
  +                "Connector (" + objectName.getKeyProperty("port") + ")";
  +            TreeControlNode connectorNode =
  +                new TreeControlNode(connectorName,
  +                                    "folder_16_pad.gif",
  +                                    nodeLabel,
  +                                    "setUpConnector.do?select=" +
  +                                    URLEncoder.encode(connectorName) +
  +                                    "&nodeLabel=" +
  +                                    URLEncoder.encode(nodeLabel),
  +                                    "content",
  +                                    true);
               serviceNode.addChild(connectorNode);
           }
       }
       
  +
  +    /**
  +     * Append nodes for all defined hosts for the specified service.
  +     *
  +     * @param serviceNode Service node for the tree control
  +     * @param serviceName Object name of the parent service
  +     *
  +     * @exception Exception if an exception occurs building the tree
  +     */
       public void getHosts(TreeControlNode serviceNode, String serviceName)
  -    throws JMException{
  -        
  -        Iterator HostItr =
  -        (mBServer.queryMBeans(new ObjectName(HOST_TYPE + WILDCARD +
  -        ",service=" + serviceName), null)).iterator();
  -        
  -        TreeControlNode hostNode = null;
  -        String encodedHostName;
  +        throws Exception {
           
  -        while(HostItr.hasNext()){
  -            
  -            ObjectInstance hostObj = (ObjectInstance)HostItr.next();
  -            
  -            String hostName =
  -            (String)mBServer.getAttribute(hostObj.getObjectName(),
  -            "name");
  -            
  -            encodedHostName =  
URLEncoder.encode(hostObj.getObjectName().toString());
  -            
  -            String nodeLabel="Host (" + hostName + ")";
  -            String encodedNodeLabel =  URLEncoder.encode(nodeLabel);
  -            
  -            hostNode =
  -            new TreeControlNode(hostObj.getObjectName().toString(),
  -            "folder_16_pad.gif",
  -            nodeLabel,
  -            "setUpHost.do?select=" + encodedHostName
  -            +"&nodeLabel="+ encodedNodeLabel,
  -            "content", true);
  -            
  +        Iterator hostNames =
  +            Lists.getHosts(mBServer, serviceName).iterator();
  +        while (hostNames.hasNext()) {
  +            String hostName = (String) hostNames.next();
  +            ObjectName objectName = new ObjectName(hostName);
  +            String nodeLabel =
  +                "Host (" + objectName.getKeyProperty("name") + ")";
  +            TreeControlNode hostNode =
  +                new TreeControlNode(hostName,
  +                                    "folder_16_pad.gif",
  +                                    nodeLabel,
  +                                    "setUpHost.do?select=" +
  +                                    URLEncoder.encode(hostName) +
  +                                    "&nodeLabel=" +
  +                                    URLEncoder.encode(nodeLabel),
  +                                    "content",
  +                                    true);
               serviceNode.addChild(hostNode);
  -            
  -            getContexts(hostNode, hostName, serviceName);
  -            getLoggers(hostNode, serviceName, hostName, null, 1);
  -            getRealms(hostNode, serviceName, hostName, null, 1);
  +            getContexts(hostNode, hostName);
  +            getLoggers(hostNode, hostName);
  +            getRealms(hostNode, hostName);
           }
  +
       }
       
  -    public void getContexts(TreeControlNode hostNode, String hostName, String 
serviceName)
  -    throws JMException{
  -        
  -        Iterator contextItr =
  -        (mBServer.queryMBeans(new ObjectName(CONTEXT_TYPE + WILDCARD +
  -        ",host=" + hostName + ",service=" + serviceName), null)).iterator();
  -        
  -        TreeControlNode contextNode = null;
  -        String encodedContextName;
  -        
  -        // arraylist to store and sort the list of available contexts.
  -        ArrayList contextList = new ArrayList();
  -        while(contextItr.hasNext()){
  -            
  -            ObjectInstance contextObj = (ObjectInstance)contextItr.next();
  -            contextList.add(contextObj.getObjectName().toString());
  -        }
   
  -        // sorting the list so that the contexts displayed in the tree are in
  -        // alphabetic order.
  -        Collections.sort(contextList);
  +    /**
  +     * Append nodes for all defined contexts for the specified host.
  +     *
  +     * @param hostNode Host node for the tree control
  +     * @param hostName Object name of the parent host
  +     *
  +     * @exception Exception if an exception occurs building the tree
  +     */
  +    public void getContexts(TreeControlNode hostNode, String hostName)
  +        throws Exception {
           
  -        for (int i=0; i<contextList.size(); i++) {
  -            String context = (String)contextList.get(i);
  -            ObjectName oName = new ObjectName(context);
  -            String contextName =
  -            (String)mBServer.getAttribute(oName , "path");
  -            
  -            encodedContextName =  URLEncoder.encode(context);
  -            String nodeLabel="Context (" + contextName + ")";
  -            String encodedNodeLabel =  URLEncoder.encode(nodeLabel);
  -            
  -            contextNode =
  -            new TreeControlNode(context,
  -            "folder_16_pad.gif",
  -            nodeLabel,
  -            "setUpContext.do?select=" + encodedContextName
  -            +"&nodeLabel="+ encodedNodeLabel,
  -            "content", false);
  -            
  +        Iterator contextNames =
  +            Lists.getContexts(mBServer, hostName).iterator();
  +        while (contextNames.hasNext()) {
  +            String contextName = (String) contextNames.next();
  +            ObjectName objectName = new ObjectName(contextName);
  +            String nodeLabel =
  +                "Context (" + objectName.getKeyProperty("path") + ")";
  +            TreeControlNode contextNode =
  +                new TreeControlNode(contextName,
  +                                    "folder_16_pad.gif",
  +                                    nodeLabel,
  +                                    "setUpContext.do?select=" +
  +                                    URLEncoder.encode(contextName) +
  +                                    "&nodeLabel=" +
  +                                    URLEncoder.encode(nodeLabel),
  +                                    "content",
  +                                    false);
               hostNode.addChild(contextNode);
  -            //get all loggers for this context
  -            if (contextName.length() > 0) {
  -                getLoggers(contextNode, serviceName, hostName, contextName, 2);
  -                getRealms(contextNode, serviceName, hostName, contextName, 2);
  -            }
  +            getLoggers(contextNode, contextName);
  +            getRealms(contextNode, contextName);
           }
  -        
  -        
  +
       }
       
       
       /**
  -     * Add the required logger nodes to the specified node instance.
  +     * Append nodes for any defined loggers for the specified container.
  +     *
  +     * @param containerNode Container node for the tree control
  +     * @param containerName Object name of the parent container
        *
  -     * @param node The <code>TreeControlNode</code> to which we should
  -     * add our logger nodes.
  -     * @param serviceName The service to which this logger belongs.
  -     * @param hostName The host to which this logger belongs.
  -     * @param contextName The context to which this logger belongs.
  -     * @param type (0,1,2)  Get all loggers for a particular service(0),
  -     * host(1), context (2).
  +     * @exception Exception if an exception occurs building the tree
        */
  -    public void getLoggers(TreeControlNode node, String serviceName,
  -    String hostName, String contextName, int type)
  -    throws JMException{
  -        
  -        Iterator loggerItr = null;
  -        
  -        if (type == 0) {
  -            loggerItr =
  -            (mBServer.queryMBeans(new ObjectName(LOGGER_TYPE +
  -            ",service=" + serviceName), null)).iterator();
  -        }  else if (type == 1) {
  -            loggerItr =
  -            (mBServer.queryMBeans(new ObjectName(LOGGER_TYPE +
  -            ",host=" + hostName + ",service=" + serviceName), null)).iterator();
  -        } else if (type == 2) {
  -            loggerItr =
  -            (mBServer.queryMBeans(new ObjectName(LOGGER_TYPE +
  -            ",path=" + contextName + ",host=" + hostName +
  -            ",service=" + serviceName), null)).iterator();
  -        }
  -        
  -        TreeControlNode loggerNode = null;
  -        String encodedLoggerName;
  -        
  -        while(loggerItr.hasNext()){
  -            
  -            ObjectInstance loggerObj = (ObjectInstance)loggerItr.next();
  -            ObjectName loggerObjName = loggerObj.getObjectName();
  -            encodedLoggerName =  
URLEncoder.encode(loggerObj.getObjectName().toString());
  -            
  -            String className =
  -            (String)mBServer.getAttribute(loggerObj.getObjectName(),
  -            SetUpLoggerAction.CLASSNAME_PROP_NAME);
  -            
  -            String loggerType = null;
  -            int period = className.lastIndexOf(".");
  -            if (period >= 0)
  -                loggerType = className.substring(period + 1);
  -            
  -            String encodedLoggerType =  URLEncoder.encode(loggerType);
  -            
  -            String nodeLabel="Logger";
  -            String encodedNodeLabel =  URLEncoder.encode(nodeLabel);
  -            
  -            loggerNode =
  -            new TreeControlNode(loggerObj.getObjectName().toString(),
  -            "folder_16_pad.gif",
  -            nodeLabel,
  -            "setUpLogger.do?select=" + encodedLoggerName
  -            +"&nodeLabel="+ encodedNodeLabel
  -            +"&type="+ encodedLoggerType,
  -            "content", true);
  -            
  -            node.addChild(loggerNode);
  +    public void getLoggers(TreeControlNode containerNode,
  +                           String containerName) throws Exception {
  +
  +        Iterator loggerNames =
  +            Lists.getLoggers(mBServer, containerName).iterator();
  +        while (loggerNames.hasNext()) {
  +            String loggerName = (String) loggerNames.next();
  +            ObjectName objectName = new ObjectName(loggerName);
  +            String nodeLabel = "Logger for " + containerNode.getLabel();
  +            TreeControlNode loggerNode =
  +                new TreeControlNode(loggerName,
  +                                    "folder_16_pad.gif",
  +                                    nodeLabel,
  +                                    "setUpLogger.do?select=" +
  +                                    URLEncoder.encode(loggerName) +
  +                                    "&nodeLabel=" +
  +                                    URLEncoder.encode(nodeLabel),
  +                                    "content",
  +                                    false);
  +            containerNode.addChild(loggerNode);
           }
  +
       }
  -    
  +
  +
       /**
  -     * Add the required realm nodes to the specified node instance.
  +     * Append nodes for any defined realms for the specified container.
  +     *
  +     * @param containerNode Container node for the tree control
  +     * @param containerName Object name of the parent container
        *
  -     * @param node The <code>TreeControlNode</code> to which we should
  -     * add our realm nodes.
  -     * @param serviceName The service to which this realm belongs.
  -     * @param hostName The host to which this realm belongs.
  -     * @param contextName The context to which this realm belongs.
  -     * @param type (0,1,2)  Get all realms for a particular service(0),
  -     * host(1), context (2).
  +     * @exception Exception if an exception occurs building the tree
        */
  -    public void getRealms(TreeControlNode node, String serviceName,
  -    String hostName, String contextName, int type)
  -    throws JMException{
  -        
  -        Iterator realmItr = null;
  -        
  -        if (type == 0) {
  -            realmItr =
  -            (mBServer.queryMBeans(new ObjectName(REALM_TYPE +
  -            ",service=" + serviceName), null)).iterator();
  -        }  else if (type == 1) {
  -            realmItr =
  -            (mBServer.queryMBeans(new ObjectName(REALM_TYPE +
  -            ",host=" + hostName + ",service=" + serviceName), null)).iterator();
  -        } else if (type == 2) {
  -            realmItr =
  -            (mBServer.queryMBeans(new ObjectName(REALM_TYPE +
  -            ",path=" + contextName + ",host=" + hostName +
  -            ",service=" + serviceName), null)).iterator();
  -        }
  -        
  -        TreeControlNode realmNode = null;
  -        String encodedRealmName;
  -        
  -        while(realmItr.hasNext()){
  -            
  -            ObjectInstance realmObj = (ObjectInstance)realmItr.next();
  -            ObjectName realmObjName = realmObj.getObjectName();
  -            encodedRealmName =  
URLEncoder.encode(realmObj.getObjectName().toString());
  -            
  -            String className =
  -            (String)mBServer.getAttribute(realmObj.getObjectName(),
  -            SetUpLoggerAction.CLASSNAME_PROP_NAME);
  -            
  -            String realmType = null;
  -            int period = className.lastIndexOf(".");
  -            if (period >= 0)
  -                realmType = className.substring(period + 1);
  -            
  -            String setUpAction = null;
  -            if ((SetUpUserDBRealmAction.JDBC_REALM).equalsIgnoreCase(realmType)) {
  -                setUpAction = "setUpJDBCRealm";
  -            } else if 
((SetUpUserDBRealmAction.JNDI_REALM).equalsIgnoreCase(realmType)) {
  -                setUpAction = "setUpJNDIRealm";
  -            } else if 
((SetUpUserDBRealmAction.MEMORY_REALM).equalsIgnoreCase(realmType)) {
  -                setUpAction = "setUpMemoryRealm";
  -            } else {
  -                // UserDatabaseRealm
  -                setUpAction = "setUpUserDBRealm";
  -            }
  -            
  -            String encodedRealmType =  URLEncoder.encode(realmType);
  -            
  -            String nodeLabel= "Realm";
  -            String encodedNodeLabel =  URLEncoder.encode(nodeLabel);
  -            
  -            realmNode =
  -            new TreeControlNode(realmObj.getObjectName().toString(),
  -            "folder_16_pad.gif",
  -            nodeLabel,
  -            setUpAction +".do?select=" + encodedRealmName
  -            +"&nodeLabel="+ encodedNodeLabel
  -            +"&type="+ encodedRealmType,
  -            "content", true);
  -            
  -            node.addChild(realmNode);
  +    public void getRealms(TreeControlNode containerNode,
  +                          String containerName) throws Exception {
  +
  +        Iterator realmNames =
  +            Lists.getRealms(mBServer, containerName).iterator();
  +        while (realmNames.hasNext()) {
  +            String realmName = (String) realmNames.next();
  +            ObjectName objectName = new ObjectName(realmName);
  +            String nodeLabel = "Realm for " + containerNode.getLabel();
  +            TreeControlNode realmNode =
  +                new TreeControlNode(realmName,
  +                                    "folder_16_pad.gif",
  +                                    nodeLabel,
  +                                    "setUpRealm.do?select=" +
  +                                    URLEncoder.encode(realmName) +
  +                                    "&nodeLabel=" +
  +                                    URLEncoder.encode(nodeLabel),
  +                                    "content",
  +                                    false);
  +            // FIXME - Need a generic SetUpRealmAction for all types
  +            // containerNode.addChild(realmNode);
           }
  +
       }
  +
       
   }
  
  
  
  1.2       +8 -7      
jakarta-tomcat-4.0/webapps/admin/WEB-INF/classes/org/apache/webapp/admin/connector/ConnectorForm.java
  
  Index: ConnectorForm.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/webapps/admin/WEB-INF/classes/org/apache/webapp/admin/connector/ConnectorForm.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ConnectorForm.java        13 Feb 2002 00:13:11 -0000      1.1
  +++ ConnectorForm.java        9 Mar 2002 00:10:56 -0000       1.2
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.0/webapps/admin/WEB-INF/classes/org/apache/webapp/admin/connector/ConnectorForm.java,v
 1.1 2002/02/13 00:13:11 manveen Exp $
  - * $Revision: 1.1 $
  - * $Date: 2002/02/13 00:13:11 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.0/webapps/admin/WEB-INF/classes/org/apache/webapp/admin/connector/ConnectorForm.java,v
 1.2 2002/03/09 00:10:56 craigmcc Exp $
  + * $Revision: 1.2 $
  + * $Date: 2002/03/09 00:10:56 $
    *
    * ====================================================================
    *
  @@ -74,7 +74,7 @@
    * Form bean for the connector page.
    *
    * @author Manveen Kaur
  - * @version $Revision: 1.1 $ $Date: 2002/02/13 00:13:11 $
  + * @version $Revision: 1.2 $ $Date: 2002/03/09 00:10:56 $
    */
   
   public final class ConnectorForm extends ActionForm {
  @@ -545,7 +545,7 @@
               
               /* general */
               numberCheck("acceptCountText", acceptCountText, true, 0, 128);
  -            numberCheck("connTimeOutText", connTimeOutText, true, 0, 60000);
  +            numberCheck("connTimeOutText", connTimeOutText, true, -1, 60000);
               numberCheck("bufferSizeText", bufferSizeText, true, 1, 8192);
               
               /* The IP address can also be null -- which means open the
  @@ -560,7 +560,7 @@
               
               /* ports */
               numberCheck("portNumber",  portText, true, 1, 65535);
  -            numberCheck("redirectPortText",  redirectPortText, true, 0, 65535);
  +            numberCheck("redirectPortText",  redirectPortText, true, -1, 65535);
               
               /* processors*/
               numberCheck("minProcessorsText",  minProcessorsText, true, 1, 512);
  @@ -581,7 +581,8 @@
                       errors.add("proxyName", new 
ActionError("error.proxyName.invalid"));
                   }
               }      
  -            numberCheck("proxyPortText",  proxyPortText, true, 0, 65535);      
  +            // FIXME - depends on Connector type
  +            // numberCheck("proxyPortText",  proxyPortText, true, 0, 65535);
           }
           
           return errors;
  
  
  
  1.2       +6 -4      
jakarta-tomcat-4.0/webapps/admin/WEB-INF/classes/org/apache/webapp/admin/connector/SetUpConnectorAction.java
  
  Index: SetUpConnectorAction.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/webapps/admin/WEB-INF/classes/org/apache/webapp/admin/connector/SetUpConnectorAction.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- SetUpConnectorAction.java 13 Feb 2002 00:13:11 -0000      1.1
  +++ SetUpConnectorAction.java 9 Mar 2002 00:10:56 -0000       1.2
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.0/webapps/admin/WEB-INF/classes/org/apache/webapp/admin/connector/SetUpConnectorAction.java,v
 1.1 2002/02/13 00:13:11 manveen Exp $
  - * $Revision: 1.1 $
  - * $Date: 2002/02/13 00:13:11 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.0/webapps/admin/WEB-INF/classes/org/apache/webapp/admin/connector/SetUpConnectorAction.java,v
 1.2 2002/03/09 00:10:56 craigmcc Exp $
  + * $Revision: 1.2 $
  + * $Date: 2002/03/09 00:10:56 $
    *
    * ====================================================================
    *
  @@ -93,7 +93,7 @@
    * a connector is chosen.
    *
    * @author Manveen Kaur
  - * @version $Revision: 1.1 $ $Date: 2002/02/13 00:13:11 $
  + * @version $Revision: 1.2 $ $Date: 2002/03/09 00:10:56 $
    */
   
   public class SetUpConnectorAction extends Action {
  @@ -274,6 +274,7 @@
               ((Integer) mBServer.getAttribute(connectorObjName,
               attribute)).toString());
               
  +            /* FIXME - Not supported on all types
               attribute = PROXY_NAME_PROP_NAME;
               connectorFm.setProxyName(
               (String) mBServer.getAttribute(connectorObjName,
  @@ -283,6 +284,7 @@
               connectorFm.setProxyPortText(
               ((Integer) mBServer.getAttribute(connectorObjName,
               attribute)).toString());
  +            */
               
           } catch(Throwable t){
               getServlet().log
  
  
  
  1.2       +6 -4      
jakarta-tomcat-4.0/webapps/admin/WEB-INF/classes/org/apache/webapp/admin/context/ContextForm.java
  
  Index: ContextForm.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/webapps/admin/WEB-INF/classes/org/apache/webapp/admin/context/ContextForm.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ContextForm.java  13 Feb 2002 00:13:11 -0000      1.1
  +++ ContextForm.java  9 Mar 2002 00:10:56 -0000       1.2
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.0/webapps/admin/WEB-INF/classes/org/apache/webapp/admin/context/ContextForm.java,v
 1.1 2002/02/13 00:13:11 manveen Exp $
  - * $Revision: 1.1 $
  - * $Date: 2002/02/13 00:13:11 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.0/webapps/admin/WEB-INF/classes/org/apache/webapp/admin/context/ContextForm.java,v
 1.2 2002/03/09 00:10:56 craigmcc Exp $
  + * $Revision: 1.2 $
  + * $Date: 2002/03/09 00:10:56 $
    *
    * ====================================================================
    *
  @@ -74,7 +74,7 @@
    * Form bean for the context page.
    *
    * @author Manveen Kaur
  - * @version $Revision: 1.1 $ $Date: 2002/02/13 00:13:11 $
  + * @version $Revision: 1.2 $ $Date: 2002/03/09 00:10:56 $
    */
   
   public final class ContextForm extends ActionForm {
  @@ -670,9 +670,11 @@
                   errors.add("docBase", new ActionError("error.docBase.required"));
               }
               
  +            /* FIXME - zero length path ok on the root context
               if ((path == null) || (path.length() < 1)) {
                   errors.add("path", new ActionError("error.path.required"));
               }
  +            */
               
               if ((workDir == null) || (workDir.length() < 1)) {
                   errors.add("workDir", new ActionError("error.workDir.required"));
  
  
  
  1.2       +15 -12    
jakarta-tomcat-4.0/webapps/admin/WEB-INF/classes/org/apache/webapp/admin/logger/SetUpLoggerAction.java
  
  Index: SetUpLoggerAction.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/webapps/admin/WEB-INF/classes/org/apache/webapp/admin/logger/SetUpLoggerAction.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- SetUpLoggerAction.java    13 Feb 2002 21:37:44 -0000      1.1
  +++ SetUpLoggerAction.java    9 Mar 2002 00:10:56 -0000       1.2
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.0/webapps/admin/WEB-INF/classes/org/apache/webapp/admin/logger/SetUpLoggerAction.java,v
 1.1 2002/02/13 21:37:44 manveen Exp $
  - * $Revision: 1.1 $
  - * $Date: 2002/02/13 21:37:44 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.0/webapps/admin/WEB-INF/classes/org/apache/webapp/admin/logger/SetUpLoggerAction.java,v
 1.2 2002/03/09 00:10:56 craigmcc Exp $
  + * $Revision: 1.2 $
  + * $Date: 2002/03/09 00:10:56 $
    *
    * ====================================================================
    *
  @@ -92,7 +92,7 @@
    * a logger is chosen.
    *
    * @author Manveen Kaur
  - * @version $Revision: 1.1 $ $Date: 2002/02/13 21:37:44 $
  + * @version $Revision: 1.2 $ $Date: 2002/03/09 00:10:56 $
    */
   
   public class SetUpLoggerAction extends Action {
  @@ -158,7 +158,8 @@
           }
           
           String selectedName = request.getParameter("select");
  -        String loggerType = request.getParameter("type");
  +        //        String loggerType = request.getParameter("type");
  +        String loggerType = null;
           // label of the node that was clicked on.
           String nodeLabel = request.getParameter("nodeLabel");
           
  @@ -215,13 +216,15 @@
           String attribute = null;
           try{
               
  -            Iterator loggerItr =
  -            mBServer.queryMBeans(new
  -            ObjectName(selectedName), null).iterator();
  -            
  -            ObjectInstance objInstance = (ObjectInstance)loggerItr.next();
  -            ObjectName loggerObjName = (objInstance).getObjectName();
  +            ObjectName loggerObjName = new ObjectName(selectedName);
               
  +            // Calculate the type of logger we are managing
  +            attribute = "className";
  +            String className = (String) mBServer.getAttribute(loggerObjName,
  +                                                              attribute);
  +            int period = className.lastIndexOf('.');
  +            loggerType = className.substring(period + 1);
  +
               // common attributes for all logger types.
               debug = (Integer) mBServer.getAttribute(loggerObjName,
               attribute=DEBUG_PROP_NAME);
  @@ -229,7 +232,7 @@
               verbosity = (Integer) mBServer.getAttribute(loggerObjName,
               attribute=VERBOSITY_PROP_NAME);
               
  -            if (FILE_LOGGER.equalsIgnoreCase(loggerType)) {
  +            if (FILE_LOGGER.equals(loggerType)) {
                   // Initialize rest of variables.
                   
                   directory = (String) mBServer.getAttribute(loggerObjName,
  @@ -269,7 +272,7 @@
           loggerFm.setLoggerName(selectedName);
           loggerFm.setNodeLabel(nodeLabel);
           
  -        if (FILE_LOGGER.equalsIgnoreCase(loggerType)) {
  +        if (FILE_LOGGER.equals(loggerType)) {
               
               loggerFm.setDirectory(directory);
               loggerFm.setPrefix(prefix);
  
  
  
  1.3       +11 -1     jakarta-tomcat-4.0/webapps/admin/host/host.jsp
  
  Index: host.jsp
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-4.0/webapps/admin/host/host.jsp,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- host.jsp  6 Mar 2002 06:49:11 -0000       1.2
  +++ host.jsp  9 Mar 2002 00:10:57 -0000       1.3
  @@ -89,7 +89,12 @@
           <controls:row labelStyle="table-label-text" dataStyle="table-normal-text">
               <controls:label><bean:message key="host.name"/>:</controls:label>
               <controls:data>
  +<%-- FIXME - input only allowed on create transaction --%>
  +<%--
                 <html:text property="name" size="24" maxlength="24"/>
  +--%>
  +              <bean:write name="hostForm" property="name"/>
  +              <html:hidden property="name"/>
               </controls:data>
           </controls:row>
   
  @@ -97,7 +102,12 @@
           <controls:row labelStyle="table-label-text" dataStyle="table-normal-text">
               <controls:label><bean:message key="host.base"/>:</controls:label>
               <controls:data>
  -              <html:text property="appBase" size="24" maxlength="24"/>
  +<%-- FIXME - input only allowed on create transaction --%>
  +<%--
  +              <html:text property="appBase" size="24"/>
  +--%>
  +              <bean:write name="hostForm" property="appBase"/>
  +              <html:hidden property="appBase"/>
               </controls:data>
           </controls:row>
   
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to