amyroh 2004/04/16 19:53:17 Added: webapps/admin/WEB-INF/classes/org/apache/webapp/admin/realm DataSourceRealmForm.java SaveDataSourceRealmAction.java webapps/admin/realm dataSourceRealm.jsp Log: Add DataSourceRealm support in admin webapp. Revision Changes Path 1.1 jakarta-tomcat-catalina/webapps/admin/WEB-INF/classes/org/apache/webapp/admin/realm/DataSourceRealmForm.java Index: DataSourceRealmForm.java =================================================================== /* * Copyright 2001,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.webapp.admin.realm; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionError; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; import java.net.InetAddress; import java.util.List; import org.apache.webapp.admin.ApplicationServlet; import org.apache.webapp.admin.LabelValueBean; /** * Form bean for the datasource realm page. * * @author Amy Roh * @version $Revision: 1.1 $ $Date: 2004/04/17 02:53:17 $ */ public final class DataSourceRealmForm extends RealmForm { // ----------------------------------------------------- Instance Variables /** * The text for the JNDI named JDBC DataSource for your database. */ private String dataSourceName = null; /** * The text for the digest. */ private String digest = null; /** * The text for if the DataSource is local to the webapp. */ private String localDataSource = "false"; /** * The text for the roleNameCol. */ private String roleNameCol = null; /** * The text for the userCredCol. */ private String userCredCol = null; /** * The text for the userNameCol. */ private String userNameCol = null; /** * The text for the userRoleTable. */ private String userRoleTable = null; /** * The text for the user table. */ private String userTable = null; // ------------------------------------------------------------- Properties /** * Return the dataSourceName. */ public String getDataSourceName() { return this.dataSourceName; } /** * Set the dataSourceName. */ public void setDataSourceName(String dataSourceName) { this.dataSourceName = dataSourceName; } /** * Return the digest. */ public String getDigest() { return this.digest; } /** * Set the digest. */ public void setDigest(String digest) { this.digest = digest; } /** * Return the localDataSource. */ public String getLocalDataSource() { return this.localDataSource; } /** * Set the localDataSource. */ public void setLocalDataSource(String localDataSource) { this.localDataSource = localDataSource; } /** * Return the roleNameCol. */ public String getRoleNameCol() { return this.roleNameCol; } /** * Set the roleNameCol. */ public void setRoleNameCol(String roleNameCol) { this.roleNameCol = roleNameCol; } /** * Return the userCredCol. */ public String getUserCredCol() { return this.userCredCol; } /** * Set the userCredCol. */ public void setUserCredCol(String userCredCol) { this.userCredCol = userCredCol; } /** * Return the userNameCol. */ public String getUserNameCol() { return this.userNameCol; } /** * Set the userNameCol. */ public void setUserNameCol(String userNameCol) { this.userNameCol = userNameCol; } /** * Return the user role table. */ public String getUserRoleTable() { return this.userRoleTable; } /** * Set the user role table. */ public void setUserRoleTable(String userRoleTable) { this.userRoleTable = userRoleTable; } /** * Return the user table. */ public String getUserTable() { return this.userTable; } /** * Set the user Table. */ public void setUserTable(String userTable) { this.userTable = userTable; } // --------------------------------------------------------- Public Methods /** * Reset all properties to their default values. * * @param mapping The mapping used to select this instance * @param request The servlet request we are processing */ public void reset(ActionMapping mapping, HttpServletRequest request) { super.reset(mapping, request); this.dataSourceName = null; this.digest = null; this.localDataSource = null; this.roleNameCol = null; this.userCredCol = null; this.userNameCol = null; this.userTable = null; this.userRoleTable = null; } /** * Render this object as a String. */ public String toString() { StringBuffer sb = new StringBuffer("DataSourceRealmForm[adminAction="); sb.append(getAdminAction()); sb.append(",debugLvl="); sb.append(getDebugLvl()); sb.append(",dataSourceName="); sb.append(dataSourceName); sb.append(",digest="); sb.append(digest); sb.append("',localDataSource='"); sb.append(localDataSource); sb.append("',roleNameCol="); sb.append(roleNameCol); sb.append("',userCredCol="); sb.append(userCredCol); sb.append("',userNameCol="); sb.append(userNameCol); sb.append("',userRoleTable="); sb.append(userRoleTable); sb.append("',userTable='"); sb.append(userTable); sb.append("',objectName='"); sb.append(getObjectName()); sb.append("',realmType="); sb.append(getRealmType()); sb.append("]"); return (sb.toString()); } /** * Validate the properties that have been set from this HTTP request, * and return an <code>ActionErrors</code> object that encapsulates any * validation errors that have been found. If no errors are found, return * <code>null</code> or an <code>ActionErrors</code> object with no * recorded error messages. * * @param mapping The mapping used to select this instance * @param request The servlet request we are processing */ public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { ActionErrors errors = new ActionErrors(); String submit = request.getParameter("submit"); //String type = request.getParameter("realmType"); // front end validation when save is clicked. //if (submit != null) { // the following fields are required. if ((dataSourceName == null) || (dataSourceName.length() < 1)) { errors.add("dataSourceName", new ActionError("error.dataSourceName.required")); } if ((roleNameCol == null) || (roleNameCol.length() < 1)) { errors.add("roleNameCol", new ActionError("error.roleNameCol.required")); } if ((userCredCol == null) || (userCredCol.length() < 1)) { errors.add("userCredCol", new ActionError("error.userCredCol.required")); } if ((userNameCol == null) || (userNameCol.length() < 1)) { errors.add("userNameCol", new ActionError("error.userNameCol.required")); } if ((userRoleTable == null) || (userRoleTable.length() < 1)) { errors.add("userRoleTable", new ActionError("error.userRoleTable.required")); } if ((userTable == null) || (userTable.length() < 1)) { errors.add("userTable", new ActionError("error.userTable.required")); } //} return errors; } } 1.1 jakarta-tomcat-catalina/webapps/admin/WEB-INF/classes/org/apache/webapp/admin/realm/SaveDataSourceRealmAction.java Index: SaveDataSourceRealmAction.java =================================================================== /* * Copyright 2001-2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.webapp.admin.realm; import java.net.URLEncoder; import java.util.Iterator; import java.util.Locale; import java.io.IOException; import javax.management.Attribute; import javax.management.MBeanServer; import javax.management.MBeanServerFactory; import javax.management.QueryExp; import javax.management.Query; import javax.management.ObjectInstance; import javax.management.ObjectName; import javax.management.JMException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.struts.action.Action; import org.apache.struts.action.ActionError; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.util.MessageResources; import org.apache.webapp.admin.ApplicationServlet; import org.apache.webapp.admin.TomcatTreeBuilder; import org.apache.webapp.admin.TreeControl; import org.apache.webapp.admin.TreeControlNode; import org.apache.webapp.admin.logger.DeleteLoggerAction; /** * The <code>Action</code> that completes <em>Add Realm</em> and * <em>Edit Realm</em> transactions for DataSource realm. * * @author Amy Roh * @version $Revision: 1.1 $ $Date: 2004/04/17 02:53:17 $ */ public final class SaveDataSourceRealmAction extends Action { // ----------------------------------------------------- Instance Variables /** * Signature for the <code>createDataSourceRealm</code> operation. */ private String createDataSourceRealmTypes[] = { "java.lang.String", // parent "java.lang.String", // dataSourceName "java.lang.String", // roleNameCol "java.lang.String", // userCredCol "java.lang.String", // userNameCol "java.lang.String", // userRoleTable "java.lang.String", // userTable }; /** * The MBeanServer we will be interacting with. */ private MBeanServer mBServer = null; /** * The MessageResources we will be retrieving messages from. */ private MessageResources resources = null; // --------------------------------------------------------- Public Methods /** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it). * Return an <code>ActionForward</code> instance describing where and how * control should be forwarded, or <code>null</code> if the response has * already been completed. * * @param mapping The ActionMapping used to select this instance * @param actionForm The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception occurs */ public ActionForward perform(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { // Acquire the resources that we need HttpSession session = request.getSession(); Locale locale = (Locale) session.getAttribute(Action.LOCALE_KEY); if (resources == null) { resources = getServlet().getResources(); } // Acquire a reference to the MBeanServer containing our MBeans try { mBServer = ((ApplicationServlet) getServlet()).getServer(); } catch (Throwable t) { throw new ServletException ("Cannot acquire MBeanServer reference", t); } // Identify the requested action DataSourceRealmForm rform = (DataSourceRealmForm) form; String adminAction = rform.getAdminAction(); String rObjectName = rform.getObjectName(); // Perform a "Create DataSource Realm" transaction (if requested) if ("Create".equals(adminAction)) { String operation = null; String values[] = null; try { String parent = rform.getParentObjectName(); String objectName = DeleteLoggerAction.getObjectName(parent, TomcatTreeBuilder.REALM_TYPE); ObjectName pname = new ObjectName(parent); StringBuffer sb = new StringBuffer(pname.getDomain()); // For service, create the corresponding Engine mBean // Parent in this case needs to be the container mBean for the service try { if ("Service".equalsIgnoreCase(pname.getKeyProperty("type"))) { sb.append(":type=Engine"); parent = sb.toString(); } } catch (Exception e) { String message = resources.getMessage(locale, "error.engineName.bad", sb.toString()); getServlet().log(message); response.sendError(HttpServletResponse.SC_BAD_REQUEST, message); return (null); } // Ensure that the requested user database name is unique ObjectName oname = new ObjectName(objectName); if (mBServer.isRegistered(oname)) { ActionErrors errors = new ActionErrors(); errors.add("realmName", new ActionError("error.realmName.exists")); saveErrors(request, errors); return (new ActionForward(mapping.getInput())); } String domain = oname.getDomain(); // Look up our MBeanFactory MBean ObjectName fname = TomcatTreeBuilder.getMBeanFactory(); // Create a new DataSourceRealm object values = new String[7]; values[0] = parent; values[1] = rform.getDataSourceName(); values[2] = rform.getRoleNameCol(); values[3] = rform.getUserCredCol(); values[4] = rform.getUserNameCol(); values[5] = rform.getUserRoleTable(); values[6] = rform.getUserTable(); operation = "createDataSourceRealm"; rObjectName = (String) mBServer.invoke(fname, operation, values, createDataSourceRealmTypes); if (rObjectName==null) { request.setAttribute("warning", "error.datasourcerealm"); return (mapping.findForward("Save Unsuccessful")); } // Add the new Realm to our tree control node TreeControl control = (TreeControl) session.getAttribute("treeControlTest"); if (control != null) { TreeControlNode parentNode = control.findNode(rform.getParentObjectName()); if (parentNode != null) { String nodeLabel = rform.getNodeLabel(); String encodedName = URLEncoder.encode(rObjectName); TreeControlNode childNode = new TreeControlNode(rObjectName, "Realm.gif", nodeLabel, "EditRealm.do?select=" + encodedName, "content", true, domain); parentNode.addChild(childNode); // FIXME - force a redisplay } else { getServlet().log ("Cannot find parent node '" + parent + "'"); } } else { getServlet().log ("Cannot find TreeControlNode!"); } } catch (Exception e) { getServlet().log (resources.getMessage(locale, "users.error.invoke", operation), e); response.sendError (HttpServletResponse.SC_INTERNAL_SERVER_ERROR, resources.getMessage(locale, "users.error.invoke", operation)); return (null); } } // Perform attribute updates as requested String attribute = null; try { ObjectName roname = new ObjectName(rObjectName); attribute = "debug"; int debug = 0; try { debug = Integer.parseInt(rform.getDebugLvl()); } catch (Throwable t) { debug = 0; } mBServer.setAttribute(roname, new Attribute("debug", new Integer(debug))); attribute = "dataSourceName"; mBServer.setAttribute(roname, new Attribute(attribute, rform.getDataSourceName())); attribute = "digest"; mBServer.setAttribute(roname, new Attribute("digest", rform.getDigest())); attribute = "roleNameCol"; mBServer.setAttribute(roname, new Attribute("roleNameCol", rform.getRoleNameCol())); attribute = "userCredCol"; mBServer.setAttribute(roname, new Attribute("userCredCol", rform.getUserCredCol())); attribute = "userNameCol"; mBServer.setAttribute(roname, new Attribute("userNameCol", rform.getUserNameCol())); attribute = "userRoleTable"; mBServer.setAttribute(roname, new Attribute("userRoleTable", rform.getUserRoleTable())); attribute = "userTable"; mBServer.setAttribute(roname, new Attribute("userTable", rform.getUserTable())); } catch (Exception e) { getServlet().log (resources.getMessage(locale, "users.error.attribute.set", attribute), e); response.sendError (HttpServletResponse.SC_INTERNAL_SERVER_ERROR, resources.getMessage(locale, "users.error.attribute.set", attribute)); return (null); } // Forward to the success reporting page session.removeAttribute(mapping.getAttribute()); return (mapping.findForward("Save Successful")); } } 1.1 jakarta-tomcat-catalina/webapps/admin/realm/dataSourceRealm.jsp Index: dataSourceRealm.jsp =================================================================== <!-- Standard Struts Entries --> <%@ page language="java" import="java.net.URLEncoder" contentType="text/html;charset=utf-8" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <%@ taglib uri="/WEB-INF/controls.tld" prefix="controls" %> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <html:html locale="true"> <%@ include file="../users/header.jsp" %> <!-- Body --> <body bgcolor="white" background="../images/PaperTexture.gif"> <!--Form --> <html:errors/> <html:form method="POST" action="/SaveDataSourceRealm"> <bean:define id="thisObjectName" type="java.lang.String" name="dataSourceRealmForm" property="objectName"/> <html:hidden property="adminAction"/> <html:hidden property="parentObjectName"/> <html:hidden property="objectName"/> <html:hidden property="allowDeletion"/> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr bgcolor="7171A5"> <td width="81%"> <div class="page-title-text" align="left"> <logic:equal name="dataSourceRealmForm" property="adminAction" value="Create"> <bean:message key="actions.realms.create"/> </logic:equal> <logic:equal name="dataSourceRealmForm" property="adminAction" value="Edit"> <bean:write name="dataSourceRealmForm" property="nodeLabel"/> </logic:equal> </div> </td> <td align="right" nowrap> <div class="page-title-text"> <controls:actions label="Realm Actions"> <controls:action selected="true"> ----<bean:message key="actions.available.actions"/>---- </controls:action> <controls:action> --------------------------------- </controls:action> <logic:notEqual name="dataSourceRealmForm" property="adminAction" value="Create"> <logic:notEqual name="dataSourceRealmForm" property="allowDeletion" value="false"> <controls:action url='<%= "/DeleteRealm.do?select=" + URLEncoder.encode(thisObjectName) %>'> <bean:message key="actions.realms.delete"/> </controls:action> </logic:notEqual> </logic:notEqual> </controls:actions> </div> </td> </tr> </table> <%@ include file="../buttons.jsp" %> <br> <table class="back-table" border="0" cellspacing="0" cellpadding="0" width="100%"> <tr> <td> <controls:table tableStyle="front-table" lineStyle="line-row"> <controls:row header="true" labelStyle="table-header-text" dataStyle="table-header-text"> <controls:label><bean:message key="service.property"/></controls:label> <controls:data><bean:message key="service.value"/></controls:data> </controls:row> <controls:row labelStyle="table-label-text" dataStyle="table-normal-text" styleId="type"> <controls:label><bean:message key="connector.type"/>:</controls:label> <controls:data> <logic:equal name="dataSourceRealmForm" property="adminAction" value="Create"> <html:select property="realmType" onchange="IA_jumpMenu('self',this)" styleId="type"> <bean:define id="realmTypeVals" name="dataSourceRealmForm" property="realmTypeVals"/> <html:options collection="realmTypeVals" property="value" labelProperty="label"/> </html:select> </logic:equal> <logic:equal name="dataSourceRealmForm" property="adminAction" value="Edit"> <bean:write name="dataSourceRealmForm" property="realmType" scope="session"/> </logic:equal> </controls:data> </controls:row> <controls:row labelStyle="table-label-text" dataStyle="table-normal-text" styleId="driver"> <controls:label><bean:message key="realm.dataSourceName"/>:</controls:label> <controls:data> <html:text property="dataSourceName" size="30" styleId="dataSourceName"/> </controls:data> </controls:row> <controls:row labelStyle="table-label-text" dataStyle="table-normal-text" styleId="debuglevel"> <controls:label><bean:message key="server.debuglevel"/>:</controls:label> <controls:data> <html:select property="debugLvl" styleId="debuglevel"> <bean:define id="debugLvlVals" name="dataSourceRealmForm" property="debugLvlVals"/> <html:options collection="debugLvlVals" property="value" labelProperty="label"/> </html:select> </controls:data> </controls:row> <controls:row labelStyle="table-label-text" dataStyle="table-normal-text" styleId="digest"> <controls:label><bean:message key="realm.digest"/>:</controls:label> <controls:data> <html:text property="digest" size="30" styleId="digest"/> </controls:data> </controls:row> <controls:row labelStyle="table-label-text" dataStyle="table-normal-text" styleId="localDataSource"> <controls:label><bean:message key="realm.localDataSource"/>:</controls:label> <controls:data> <html:select property="localDataSource" styleId="localDataSource"> <bean:define id="booleanVals" name="hostForm" property="booleanVals"/> <html:options collection="booleanVals" property="value" labelProperty="label"/> </html:select> </controls:data> </controls:row> <controls:row labelStyle="table-label-text" dataStyle="table-normal-text" styleId="roleNameCol"> <controls:label><bean:message key="realm.roleNameCol"/>:</controls:label> <controls:data> <html:text property="roleNameCol" size="30" styleId="roleNameCol"/> </controls:data> </controls:row> <controls:row labelStyle="table-label-text" dataStyle="table-normal-text" styleId="userCredCol"> <controls:label><bean:message key="realm.userCredCol"/>:</controls:label> <controls:data> <html:text property="userCredCol" size="30" styleId="userCredCol"/> </controls:data> </controls:row> <controls:row labelStyle="table-label-text" dataStyle="table-normal-text" styleId="userNameCol"> <controls:label><bean:message key="realm.userNameCol"/>:</controls:label> <controls:data> <html:text property="userNameCol" size="30" styleId="userNameCol"/> </controls:data> </controls:row> <controls:row labelStyle="table-label-text" dataStyle="table-normal-text" styleId="userRoleTable"> <controls:label><bean:message key="realm.userRoleTable"/>:</controls:label> <controls:data> <html:text property="userRoleTable" size="30" styleId="userRoleTable"/> </controls:data> </controls:row> <controls:row labelStyle="table-label-text" dataStyle="table-normal-text" styleId="userTable"> <controls:label><bean:message key="realm.userTable"/>:</controls:label> <controls:data> <html:text property="userTable" size="30" styleId="userTable"/> </controls:data> </controls:row> </controls:table> </td> </tr> </table> <%@ include file="../buttons.jsp" %> <br> </html:form> <p> </p> </body> </html:html>
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]