[Commits] (bcm) support both hsqldb and mysql for testing. this
requires maintaining variant
commits at osafoundation.org
commits at osafoundation.org
Wed Apr 13 16:50:32 PDT 2005
Commit by: bcm
Modified files:
server/build.xml 1.35 1.36
server/shared.properties 1.21 1.22
server/core/build.xml 1.20 1.21
server/core/etc/Role.hbm.xml 1.1 1.2
server/core/etc/User.hbm.xml 1.1 1.2
server/core/src/org/osaf/cosmo/dao/RoleDAO.java 1.1 1.2
server/core/src/org/osaf/cosmo/dao/UserDAO.java 1.1 1.2
server/core/src/org/osaf/cosmo/dao/hibernate/RoleDAOHibernate.java 1.1 1.2
server/core/src/org/osaf/cosmo/dao/hibernate/UserDAOHibernate.java 1.1 1.2
server/core/src/org/osaf/cosmo/manager/ProvisioningManager.java 1.1 1.2
server/core/src/org/osaf/cosmo/manager/impl/ProvisioningManagerImpl.java 1.1 1.2
server/core/src/org/osaf/cosmo/model/Role.java 1.3 1.4
server/core/src/org/osaf/cosmo/model/User.java 1.4 1.5
server/core/test/org/osaf/cosmo/dao/RoleDAOTest.java 1.1 1.2
server/core/test/org/osaf/cosmo/dao/UserDAOTest.java 1.1 1.2
server/core/test/org/osaf/cosmo/manager/ProvisioningManagerTest.java 1.1 1.2
server/db/schema.hsqldb.sql None 1.1
server/db/schema.mysql.sql None 1.1
server/db/schema.sql 1.4 None
server/docs/TODO.txt 1.53 1.54
server/web/src/org/osaf/cosmo/ui/UserAction.java 1.4 1.5
server/web/web/WEB-INF/struts-config.xml 1.5 1.6
server/web/web/WEB-INF/validation.xml 1.2 1.3
server/web/web/WEB-INF/jsp/user/list.jsp 1.4 1.5
server/web/web/WEB-INF/jsp/user/view.jsp 1.3 1.4
Log message:
support both hsqldb and mysql for testing. this requires maintaining variant
schema files for both databases.
add id columns to user and role tables that serve as synthetic primary keys.
this forces the dao and manager apis to change so that we can retrieve objects
identified by either id or name.
sync the user action to the new apis. now that update actions have to know
about ids (and can't allow usernames to be modified, since i haven't found a
way to rename nodes in jcr), we use two separate-but-almost-equal form beans
and validations. ew. i have tipped back over to the camp that uses explicitly
coded form beans rather than dynabeans.
ViewCVS links:
http://cvs.osafoundation.org/index.cgi/server/build.xml.diff?r1=text&tr1=1.35&r2=text&tr2=1.36
http://cvs.osafoundation.org/index.cgi/server/shared.properties.diff?r1=text&tr1=1.21&r2=text&tr2=1.22
http://cvs.osafoundation.org/index.cgi/server/core/build.xml.diff?r1=text&tr1=1.20&r2=text&tr2=1.21
http://cvs.osafoundation.org/index.cgi/server/core/etc/Role.hbm.xml.diff?r1=text&tr1=1.1&r2=text&tr2=1.2
http://cvs.osafoundation.org/index.cgi/server/core/etc/User.hbm.xml.diff?r1=text&tr1=1.1&r2=text&tr2=1.2
http://cvs.osafoundation.org/index.cgi/server/core/src/org/osaf/cosmo/dao/RoleDAO.java.diff?r1=text&tr1=1.1&r2=text&tr2=1.2
http://cvs.osafoundation.org/index.cgi/server/core/src/org/osaf/cosmo/dao/UserDAO.java.diff?r1=text&tr1=1.1&r2=text&tr2=1.2
http://cvs.osafoundation.org/index.cgi/server/core/src/org/osaf/cosmo/dao/hibernate/RoleDAOHibernate.java.diff?r1=text&tr1=1.1&r2=text&tr2=1.2
http://cvs.osafoundation.org/index.cgi/server/core/src/org/osaf/cosmo/dao/hibernate/UserDAOHibernate.java.diff?r1=text&tr1=1.1&r2=text&tr2=1.2
http://cvs.osafoundation.org/index.cgi/server/core/src/org/osaf/cosmo/manager/ProvisioningManager.java.diff?r1=text&tr1=1.1&r2=text&tr2=1.2
http://cvs.osafoundation.org/index.cgi/server/core/src/org/osaf/cosmo/manager/impl/ProvisioningManagerImpl.java.diff?r1=text&tr1=1.1&r2=text&tr2=1.2
http://cvs.osafoundation.org/index.cgi/server/core/src/org/osaf/cosmo/model/Role.java.diff?r1=text&tr1=1.3&r2=text&tr2=1.4
http://cvs.osafoundation.org/index.cgi/server/core/src/org/osaf/cosmo/model/User.java.diff?r1=text&tr1=1.4&r2=text&tr2=1.5
http://cvs.osafoundation.org/index.cgi/server/core/test/org/osaf/cosmo/dao/RoleDAOTest.java.diff?r1=text&tr1=1.1&r2=text&tr2=1.2
http://cvs.osafoundation.org/index.cgi/server/core/test/org/osaf/cosmo/dao/UserDAOTest.java.diff?r1=text&tr1=1.1&r2=text&tr2=1.2
http://cvs.osafoundation.org/index.cgi/server/core/test/org/osaf/cosmo/manager/ProvisioningManagerTest.java.diff?r1=text&tr1=1.1&r2=text&tr2=1.2
http://cvs.osafoundation.org/index.cgi/server/db/schema.hsqldb.sql?rev=1.1&content-type=text/vnd.viewcvs-markup
http://cvs.osafoundation.org/index.cgi/server/db/schema.mysql.sql?rev=1.1&content-type=text/vnd.viewcvs-markup
http://cvs.osafoundation.org/index.cgi/server/db/schema.sql.diff?r1=text&tr1=1.4&r2=text&tr2=None
http://cvs.osafoundation.org/index.cgi/server/docs/TODO.txt.diff?r1=text&tr1=1.53&r2=text&tr2=1.54
http://cvs.osafoundation.org/index.cgi/server/web/src/org/osaf/cosmo/ui/UserAction.java.diff?r1=text&tr1=1.4&r2=text&tr2=1.5
http://cvs.osafoundation.org/index.cgi/server/web/web/WEB-INF/struts-config.xml.diff?r1=text&tr1=1.5&r2=text&tr2=1.6
http://cvs.osafoundation.org/index.cgi/server/web/web/WEB-INF/validation.xml.diff?r1=text&tr1=1.2&r2=text&tr2=1.3
http://cvs.osafoundation.org/index.cgi/server/web/web/WEB-INF/jsp/user/list.jsp.diff?r1=text&tr1=1.4&r2=text&tr2=1.5
http://cvs.osafoundation.org/index.cgi/server/web/web/WEB-INF/jsp/user/view.jsp.diff?r1=text&tr1=1.3&r2=text&tr2=1.4
Index: server/core/build.xml
diff -u server/core/build.xml:1.20 server/core/build.xml:1.21
--- server/core/build.xml:1.20 Tue Apr 12 19:31:51 2005
+++ server/core/build.xml Wed Apr 13 16:50:24 2005
@@ -17,7 +17,6 @@
<pathelement location="${jackrabbit.jar}"/>
<pathelement location="${jcr.jar}"/>
<pathelement location="${jdom.jar}"/>
- <pathelement location="${joda-time.jar}"/>
<pathelement location="${jspapi.jar}"/>
<pathelement location="${servletapi.jar}"/>
<pathelement location="${spring.jar}"/>
Index: server/core/test/org/osaf/cosmo/dao/UserDAOTest.java
diff -u server/core/test/org/osaf/cosmo/dao/UserDAOTest.java:1.1 server/core/test/org/osaf/cosmo/dao/UserDAOTest.java:1.2
--- server/core/test/org/osaf/cosmo/dao/UserDAOTest.java:1.1 Tue Apr 12 18:52:45 2005
+++ server/core/test/org/osaf/cosmo/dao/UserDAOTest.java Wed Apr 13 16:50:27 2005
@@ -45,38 +45,33 @@
User user = TestHelper.makeDummyUser();
dao.saveUser(user);
+ assertNotNull(user.getId());
assertNotNull(user.getDateCreated());
assertNotNull(user.getDateModified());
- User user2 = dao.getUser(user.getUsername());
+ // get by id
+ User user2 = dao.getUser(user.getId());
assertTrue(user2.equals(user));
assertEquals(user2.hashCode(), user.hashCode());
assertNotNull(user2.getEmail());
- assertEquals(user2.getDateCreated().getTime(),
- user.getDateCreated().getTime());
- assertEquals(user2.getDateModified().getTime(),
- user.getDateModified().getTime());
-
- user2.setPassword("changed password");
- dao.updateUser(user2);
- assertTrue(user2.hashCode() != user.hashCode());
- assertEquals(user2.getDateCreated().getTime(),
- user.getDateCreated().getTime());
- assertTrue(user2.getDateModified().getTime() !=
- user.getDateModified().getTime());
-
- User user3 = dao.getUser(user2.getUsername());
- assertEquals(user3.getPassword(), user2.getPassword());
- assertTrue(! user3.getPassword().equals(user.getPassword()));
- assertEquals(user3.getEmail(), user.getEmail());
- assertEquals(user3.getDateCreated().getTime(),
- user2.getDateCreated().getTime());
- assertEquals(user3.getDateModified().getTime(),
- user2.getDateModified().getTime());
- dao.removeUser(user.getUsername());
+ // get by username
+ User user3 = dao.getUser(user.getId());
+ assertTrue(user3.equals(user));
+ assertEquals(user3.hashCode(), user.hashCode());
+ assertNotNull(user3.getEmail());
+
+ user3.setPassword("changed password");
+ dao.updateUser(user3);
+ assertTrue(user3.hashCode() != user.hashCode());
+
+ User user4 = dao.getUser(user2.getId());
+ assertEquals(user4.getPassword(), user3.getPassword());
+ assertTrue(! user4.getPassword().equals(user.getPassword()));
+
+ dao.removeUser(user);
try {
- dao.getUser(user.getUsername());
+ dao.getUser(user.getId());
fail("user not removed");
} catch (DataRetrievalFailureException e) {
// expected
Index: server/core/etc/Role.hbm.xml
diff -u server/core/etc/Role.hbm.xml:1.1 server/core/etc/Role.hbm.xml:1.2
--- server/core/etc/Role.hbm.xml:1.1 Tue Apr 12 16:27:29 2005
+++ server/core/etc/Role.hbm.xml Wed Apr 13 16:50:24 2005
@@ -11,36 +11,45 @@
dynamic-insert="false"
select-before-update="false"
optimistic-lock="version">
- <id name="name"
- type="java.lang.String"
+ <id name="id"
+ type="java.lang.Long"
unsaved-value="null">
- <column name="name"
- length="32"
+ <column name="id"
not-null="true"
- sql-type="string"/>
- <generator class="assigned"/>
+ sql-type="long"/>
+ <generator class="native"/>
</id>
+ <property name="name"
+ type="java.lang.String"
+ update="true"
+ insert="true"
+ access="property"
+ column="name"
+ length="32"
+ not-null="true"/>
<property name="dateCreated"
type="java.util.Date"
- update="true"
+ update="false"
insert="true"
access="property"
- column="dateCreated"/>
+ column="dateCreated"
+ not-null="true"/>
<property name="dateModified"
type="java.util.Date"
update="true"
insert="true"
access="property"
- column="dateModified"/>
+ column="dateModified"
+ not-null="true"/>
<set name="users"
table="userrole"
lazy="true"
inverse="true"
cascade="none"
sort="unsorted">
- <key column="rolename"/>
+ <key column="roleid"/>
<many-to-many class="org.osaf.cosmo.model.User"
- column="username"
+ column="userid"
outer-join="auto"/>
</set>
</class>
Index: server/core/test/org/osaf/cosmo/dao/RoleDAOTest.java
diff -u server/core/test/org/osaf/cosmo/dao/RoleDAOTest.java:1.1 server/core/test/org/osaf/cosmo/dao/RoleDAOTest.java:1.2
--- server/core/test/org/osaf/cosmo/dao/RoleDAOTest.java:1.1 Tue Apr 12 18:52:45 2005
+++ server/core/test/org/osaf/cosmo/dao/RoleDAOTest.java Wed Apr 13 16:50:27 2005
@@ -51,22 +51,25 @@
Role role = TestHelper.makeDummyRole();
dao.saveRole(role);
+ assertNotNull(role.getId());
assertNotNull(role.getDateCreated());
assertNotNull(role.getDateModified());
- Role role2 = dao.getRole(role.getName());
+ // get by id
+ Role role2 = dao.getRole(role.getId());
assertTrue(role2.equals(role));
assertEquals(role2.hashCode(), role.hashCode());
- assertEquals(role2.getDateCreated().getTime(),
- role.getDateCreated().getTime());
- assertEquals(role2.getDateModified().getTime(),
- role.getDateModified().getTime());
+
+ // get by name
+ Role role3 = dao.getRole(role.getName());
+ assertTrue(role3.equals(role));
+ assertEquals(role3.hashCode(), role.hashCode());
// update doesn't do anything
- dao.removeRole(role.getName());
+ dao.removeRole(role);
try {
- dao.getRole(role.getName());
+ dao.getRole(role.getId());
fail("role not removed");
} catch (DataRetrievalFailureException e) {
// expected
@@ -95,13 +98,13 @@
role.getUsers().add(user);
dao.updateRole(role);
- Role role2 = dao.getRole(role.getName());
+ Role role2 = dao.getRole(role.getId());
assertTrue(role.getUsers().size() == 1);
role.getUsers().remove(user);
dao.updateRole(role);
- Role role3 = dao.getRole(role.getName());
+ Role role3 = dao.getRole(role.getId());
assertTrue(role.getUsers().isEmpty());
dao.removeRole(role);
Index: server/shared.properties
diff -u server/shared.properties:1.21 server/shared.properties:1.22
--- server/shared.properties:1.21 Tue Apr 12 18:51:51 2005
+++ server/shared.properties Wed Apr 13 16:50:23 2005
@@ -96,6 +96,7 @@
# distribution properties
#
+cosmo.dist.userdb.schema=schema.mysql.sql
cosmo.dist.userdb.dialect=net.sf.hibernate.dialect.MySQLDialect
cosmo.dist.userdb.driver=com.mysql.jdbc.Driver
cosmo.dist.userdb.dataSource=java:comp/env/jdbc/cosmo
@@ -109,6 +110,7 @@
# test properties
#
+cosmo.test.userdb.schema=schema.hsqldb.sql
cosmo.test.userdb.dialect=net.sf.hibernate.dialect.HSQLDialect
cosmo.test.userdb.driver=org.hsqldb.jdbcDriver
cosmo.test.userdb.database=userdb
Index: server/docs/TODO.txt
diff -u server/docs/TODO.txt:1.53 server/docs/TODO.txt:1.54
--- server/docs/TODO.txt:1.53 Tue Apr 12 18:52:47 2005
+++ server/docs/TODO.txt Wed Apr 13 16:50:28 2005
@@ -4,11 +4,9 @@
core:
- * make pk of user and role tables a long id rather than name (but
- keep that col indexed)
-
web:
+ * replace DynaActionForm with a UserForm
* get tests running again
docs:
@@ -29,7 +27,7 @@
core:
- * provide an Acegi Security authentication context for all tests
+ * security subsystem tests
webui:
@@ -41,6 +39,9 @@
* email confirmation of account signup
* admin ability to confirm an unconfirmed account
* account mgmt screen - change email, password
+ * move from sql to jcr for users and roles?
+ * user mgmt api?
+ * user mgmt command line tool?
* batch remove on user list
* page,sort,search user list
* icons on user list for root users
Index: server/web/web/WEB-INF/struts-config.xml
diff -u server/web/web/WEB-INF/struts-config.xml:1.5 server/web/web/WEB-INF/struts-config.xml:1.6
--- server/web/web/WEB-INF/struts-config.xml:1.5 Tue Apr 12 14:58:24 2005
+++ server/web/web/WEB-INF/struts-config.xml Wed Apr 13 16:50:28 2005
@@ -7,7 +7,7 @@
<struts-config>
<form-beans>
- <form-bean name="userForm"
+ <form-bean name="createUserForm"
type="org.apache.struts.validator.DynaValidatorForm">
<form-property name="username" type="java.lang.String"/>
<form-property name="email" type="java.lang.String"/>
@@ -15,6 +15,14 @@
<form-property name="confirm" type="java.lang.String"/>
<form-property name="role" type="java.lang.String[]"/>
</form-bean>
+ <form-bean name="updateUserForm"
+ type="org.apache.struts.validator.DynaValidatorForm">
+ <form-property name="id" type="java.lang.String"/>
+ <form-property name="email" type="java.lang.String"/>
+ <form-property name="password" type="java.lang.String"/>
+ <form-property name="confirm" type="java.lang.String"/>
+ <form-property name="role" type="java.lang.String[]"/>
+ </form-bean>
</form-beans>
<global-exceptions>
@@ -54,7 +62,7 @@
<action path="/user"
type="org.osaf.cosmo.ui.UserAction"
- name="userForm"
+ name="updateUserForm"
scope="request"
validate="false"
parameter="view">
@@ -63,7 +71,7 @@
<action path="/user/update"
type="org.osaf.cosmo.ui.UserAction"
- name="userForm"
+ name="updateUserForm"
scope="request"
validate="true"
input="/user.do"
@@ -81,7 +89,7 @@
<action path="/users"
type="org.osaf.cosmo.ui.UserAction"
- name="userForm"
+ name="createUserForm"
scope="request"
validate="false"
parameter="list">
@@ -90,7 +98,7 @@
<action path="/user/create"
type="org.osaf.cosmo.ui.UserAction"
- name="userForm"
+ name="createUserForm"
scope="request"
validate="true"
input="/users.do"
Index: server/core/src/org/osaf/cosmo/model/Role.java
diff -u server/core/src/org/osaf/cosmo/model/Role.java:1.3 server/core/src/org/osaf/cosmo/model/Role.java:1.4
--- server/core/src/org/osaf/cosmo/model/Role.java:1.3 Tue Apr 12 16:27:30 2005
+++ server/core/src/org/osaf/cosmo/model/Role.java Wed Apr 13 16:50:26 2005
@@ -6,11 +6,13 @@
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
+import org.apache.commons.lang.builder.ToStringBuilder;
/**
*/
public class Role extends BaseModelObject {
+ private Long id;
private String name;
private Date dateCreated;
private Date dateModified;
@@ -24,6 +26,18 @@
/**
*/
+ public Long getId() {
+ return id;
+ }
+
+ /**
+ */
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ /**
+ */
public String getName() {
return name;
}
@@ -89,4 +103,15 @@
append(name).
toHashCode();
}
+
+ /**
+ */
+ public String toString() {
+ return new ToStringBuilder(this).
+ append("id", id).
+ append("name", name).
+ append("dateCreated", dateCreated).
+ append("dateModified", dateModified).
+ toString();
+ }
}
Index: server/core/src/org/osaf/cosmo/dao/UserDAO.java
diff -u server/core/src/org/osaf/cosmo/dao/UserDAO.java:1.1 server/core/src/org/osaf/cosmo/dao/UserDAO.java:1.2
--- server/core/src/org/osaf/cosmo/dao/UserDAO.java:1.1 Fri Apr 8 16:53:21 2005
+++ server/core/src/org/osaf/cosmo/dao/UserDAO.java Wed Apr 13 16:50:24 2005
@@ -17,6 +17,10 @@
/**
*/
+ public User getUser(Long id);
+
+ /**
+ */
public User getUser(String username);
/**
@@ -29,7 +33,7 @@
/**
*/
- public void removeUser(String username);
+ public void removeUser(Long id);
/**
*/
Index: server/core/src/org/osaf/cosmo/manager/ProvisioningManager.java
diff -u server/core/src/org/osaf/cosmo/manager/ProvisioningManager.java:1.1 server/core/src/org/osaf/cosmo/manager/ProvisioningManager.java:1.2
--- server/core/src/org/osaf/cosmo/manager/ProvisioningManager.java:1.1 Fri Apr 8 16:53:23 2005
+++ server/core/src/org/osaf/cosmo/manager/ProvisioningManager.java Wed Apr 13 16:50:26 2005
@@ -18,7 +18,11 @@
/**
*/
- public Role getRole(String role);
+ public Role getRole(String id);
+
+ /**
+ */
+ public Role getRoleByName(String role);
/**
*/
@@ -26,7 +30,11 @@
/**
*/
- public User getUser(String username);
+ public User getUser(String id);
+
+ /**
+ */
+ public User getUserByUsername(String username);
/**
*/
@@ -38,5 +46,5 @@
/**
*/
- public void removeUser(String username);
+ public void removeUser(String id);
}
Index: server/web/web/WEB-INF/validation.xml
diff -u server/web/web/WEB-INF/validation.xml:1.2 server/web/web/WEB-INF/validation.xml:1.3
--- server/web/web/WEB-INF/validation.xml:1.2 Tue Apr 12 14:58:24 2005
+++ server/web/web/WEB-INF/validation.xml Wed Apr 13 16:50:28 2005
@@ -12,7 +12,7 @@
</constant>
</global>
<formset>
- <form name="userForm">
+ <form name="createUserForm">
<field property="username"
depends="required,mask,minlength,maxlength">
<msg name="required" key="Form.FieldRequired"/>
@@ -84,5 +84,54 @@
<msg name="required" key="Form.AtLeastOneRequired"/>
</field>
</form>
+ <form name="updateUserForm">
+ <field property="email"
+ depends="required,email,maxlength">
+ <msg name="required" key="Form.FieldRequired"/>
+ <msg name="email" key="Form.EmailInvalid"/>
+ <msg name="maxlength" key="Form.Length"/>
+ <arg0 name="maxlength" key="${var:minlength}" resource="false"/>
+ <arg1 name="maxlength" key="${var:maxlength}" resource="false"/>
+ <var>
+ <var-name>minlength</var-name>
+ <var-value>1</var-value>
+ </var>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>32</var-value>
+ </var>
+ </field>
+ <field property="password"
+ depends="required,minlength,maxlength">
+ <msg name="required" key="Form.FieldRequired"/>
+ <msg name="minlength" key="Form.Length"/>
+ <msg name="maxlength" key="Form.Length"/>
+ <arg0 name="minlength" key="${var:minlength}" resource="false"/>
+ <arg1 name="minlength" key="${var:maxlength}" resource="false"/>
+ <arg0 name="maxlength" key="${var:minlength}" resource="false"/>
+ <arg1 name="maxlength" key="${var:maxlength}" resource="false"/>
+ <var>
+ <var-name>minlength</var-name>
+ <var-value>6</var-value>
+ </var>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>16</var-value>
+ </var>
+ </field>
+ <field property="confirm"
+ depends="required,validwhen">
+ <msg name="required" key="Form.FieldRequired"/>
+ <msg name="validwhen" key="User.Form.PasswordMismatch"/>
+ <var>
+ <var-name>test</var-name>
+ <var-value>(*this* == password)</var-value>
+ </var>
+ </field>
+ <field property="role"
+ depends="required">
+ <msg name="required" key="Form.AtLeastOneRequired"/>
+ </field>
+ </form>
</formset>
</form-validation>
Index: server/web/web/WEB-INF/jsp/user/view.jsp
diff -u server/web/web/WEB-INF/jsp/user/view.jsp:1.3 server/web/web/WEB-INF/jsp/user/view.jsp:1.4
--- server/web/web/WEB-INF/jsp/user/view.jsp:1.3 Tue Apr 12 14:58:25 2005
+++ server/web/web/WEB-INF/jsp/user/view.jsp Wed Apr 13 16:50:29 2005
@@ -58,10 +58,10 @@
<b><fmt:message key="User.Form.Roles"/></b>
</td>
<td class="md" align="left">
- <c:forEach var="rolename" items="${Roles}">
- <html:multibox property="role" value="${rolename}"
+ <c:forEach var="role" items="${Roles}">
+ <html:multibox property="role" value="${role.id}"
styleClass="md"/>
- ${rolename}<br/>
+ ${role.name}<br/>
</c:forEach>
<cosmo:errmsg property="role"/>
</td>
@@ -78,11 +78,11 @@
<fmt:message key="User.Form.Button.Cancel"/>
</html:cancel>
- <html:link page="/user/remove.do?username=${User.username}">
+ <html:link page="/user/remove.do?id=${User.id}">
<fmt:message key="User.Form.Button.Remove"/>
</html:link>
</td>
</tr>
</table>
- <html:hidden property="username"/>
+ <html:hidden property="id"/>
</html:form>
Index: server/web/web/WEB-INF/jsp/user/list.jsp
diff -u server/web/web/WEB-INF/jsp/user/list.jsp:1.4 server/web/web/WEB-INF/jsp/user/list.jsp:1.5
--- server/web/web/WEB-INF/jsp/user/list.jsp:1.4 Tue Apr 12 14:58:25 2005
+++ server/web/web/WEB-INF/jsp/user/list.jsp Wed Apr 13 16:50:29 2005
@@ -107,10 +107,10 @@
<b><fmt:message key="User.Form.Roles"/></b>
</td>
<td class="md" align="left">
- <c:forEach var="rolename" items="${Roles}">
- <html:multibox property="role" value="${rolename}"
+ <c:forEach var="role" items="${Roles}">
+ <html:multibox property="role" value="${role.id}"
styleClass="md"/>
- ${rolename}<br/>
+ ${role.name}<br/>
</c:forEach>
<cosmo:errmsg property="role"/>
</td>
Index: server/build.xml
diff -u server/build.xml:1.35 server/build.xml:1.36
--- server/build.xml:1.35 Tue Apr 12 19:31:50 2005
+++ server/build.xml Wed Apr 13 16:50:23 2005
@@ -58,7 +58,7 @@
userid="${cosmo.test.userdb.username}"
password="${cosmo.test.userdb.password}">
<fileset dir="${cosmo.db}">
- <include name="schema.sql"/>
+ <include name="${cosmo.test.userdb.schema}"/>
</fileset>
<classpath>
<pathelement location="${cosmo.test.userdb.jar}"/>
@@ -194,7 +194,7 @@
userid="${cosmo.dist.userdb.username}"
password="${cosmo.dist.userdb.password}">
<fileset dir="${cosmo.db}">
- <include name="schema.sql"/>
+ <include name="${cosmo.dist.userdb.schema}"/>
</fileset>
<classpath>
<pathelement location="${cosmo.dist.userdb.jar}"/>
Index: server/core/src/org/osaf/cosmo/model/User.java
diff -u server/core/src/org/osaf/cosmo/model/User.java:1.4 server/core/src/org/osaf/cosmo/model/User.java:1.5
--- server/core/src/org/osaf/cosmo/model/User.java:1.4 Tue Apr 12 16:27:30 2005
+++ server/core/src/org/osaf/cosmo/model/User.java Wed Apr 13 16:50:26 2005
@@ -6,11 +6,13 @@
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
+import org.apache.commons.lang.builder.ToStringBuilder;
/**
*/
public class User extends BaseModelObject {
+ private Long id;
private String username;
private String password;
private String email;
@@ -26,6 +28,18 @@
/**
*/
+ public Long getId() {
+ return id;
+ }
+
+ /**
+ */
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ /**
+ */
public String getUsername() {
return username;
}
@@ -131,4 +145,17 @@
append(email).
toHashCode();
}
+
+ /**
+ */
+ public String toString() {
+ return new ToStringBuilder(this).
+ append("id", id).
+ append("username", username).
+ append("password", password).
+ append("email", email).
+ append("dateCreated", dateCreated).
+ append("dateModified", dateModified).
+ toString();
+ }
}
Index: server/core/src/org/osaf/cosmo/manager/impl/ProvisioningManagerImpl.java
diff -u server/core/src/org/osaf/cosmo/manager/impl/ProvisioningManagerImpl.java:1.1 server/core/src/org/osaf/cosmo/manager/impl/ProvisioningManagerImpl.java:1.2
--- server/core/src/org/osaf/cosmo/manager/impl/ProvisioningManagerImpl.java:1.1 Fri Apr 8 16:53:24 2005
+++ server/core/src/org/osaf/cosmo/manager/impl/ProvisioningManagerImpl.java Wed Apr 13 16:50:26 2005
@@ -66,7 +66,13 @@
/**
*/
- public Role getRole(String name) {
+ public Role getRole(String id) {
+ return roleDao.getRole(new Long(id));
+ }
+
+ /**
+ */
+ public Role getRoleByName(String name) {
return roleDao.getRole(name);
}
@@ -78,7 +84,13 @@
/**
*/
- public User getUser(String username) {
+ public User getUser(String id) {
+ return userDao.getUser(new Long(id));
+ }
+
+ /**
+ */
+ public User getUserByUsername(String username) {
return userDao.getUser(username);
}
@@ -107,9 +119,10 @@
/**
*/
- public void removeUser(String username) {
- shareDao.deleteHomedir(username);
- userDao.removeUser(username);
+ public void removeUser(String id) {
+ User user = getUser(id);
+ shareDao.deleteHomedir(user.getUsername());
+ userDao.removeUser(user);
}
private String digestPassword(String password) {
Index: server/core/src/org/osaf/cosmo/dao/hibernate/UserDAOHibernate.java
diff -u server/core/src/org/osaf/cosmo/dao/hibernate/UserDAOHibernate.java:1.1 server/core/src/org/osaf/cosmo/dao/hibernate/UserDAOHibernate.java:1.2
--- server/core/src/org/osaf/cosmo/dao/hibernate/UserDAOHibernate.java:1.1 Fri Apr 8 16:53:22 2005
+++ server/core/src/org/osaf/cosmo/dao/hibernate/UserDAOHibernate.java Wed Apr 13 16:50:25 2005
@@ -29,6 +29,10 @@
private static final String HQL_GET_USERS =
"from User order by username";
+ private static final String HQL_GET_USER_BY_USERNAME =
+ "from User where username=?";
+ private static final String HQL_DELETE_USER =
+ "from User where id=?";
/**
*/
@@ -38,27 +42,38 @@
/**
*/
- public User getUser(String username) {
- return (User)
- getHibernateTemplate().execute(new GetUserCallback(username));
- }
-
- private class GetUserCallback implements HibernateCallback {
- private String username;
-
- public GetUserCallback(String username) {
- this.username = username;
- }
-
- public Object doInHibernate(Session session)
- throws HibernateException, SQLException {
- User user = (User) session.get(User.class, username);
- if (user == null) {
- throw new ObjectRetrievalFailureException(User.class, username);
- }
- Hibernate.initialize(user.getRoles());
- return user;
- }
+ public User getUser(final Long id) {
+ return (User) getHibernateTemplate().execute(new HibernateCallback() {
+ public Object doInHibernate(Session session)
+ throws HibernateException, SQLException {
+ User user = (User) session.get(User.class, id);
+ if (user == null) {
+ throw new ObjectRetrievalFailureException(User.class,
+ id);
+ }
+ Hibernate.initialize(user.getRoles());
+ return user;
+ }
+ });
+ }
+
+ /**
+ */
+ public User getUser(final String username) {
+ return (User) getHibernateTemplate().execute(new HibernateCallback() {
+ public Object doInHibernate(Session session)
+ throws HibernateException, SQLException {
+ List users = session.find(HQL_GET_USER_BY_USERNAME,
+ username, Hibernate.STRING);
+ if (users.isEmpty()) {
+ throw new ObjectRetrievalFailureException(User.class,
+ username);
+ }
+ User user = (User) users.get(0);
+ Hibernate.initialize(user.getRoles());
+ return user;
+ }
+ });
}
/**
@@ -78,14 +93,13 @@
/**
*/
- public void removeUser(String username) {
- Object user = getHibernateTemplate().load(User.class, username);
- getHibernateTemplate().delete(user);
+ public void removeUser(Long id) {
+ getHibernateTemplate().delete(HQL_DELETE_USER, id, Hibernate.LONG);
}
/**
*/
public void removeUser(User user) {
- removeUser(user.getUsername());
+ removeUser(user.getId());
}
}
Index: server/core/test/org/osaf/cosmo/manager/ProvisioningManagerTest.java
diff -u server/core/test/org/osaf/cosmo/manager/ProvisioningManagerTest.java:1.1 server/core/test/org/osaf/cosmo/manager/ProvisioningManagerTest.java:1.2
--- server/core/test/org/osaf/cosmo/manager/ProvisioningManagerTest.java:1.1 Tue Apr 12 18:52:46 2005
+++ server/core/test/org/osaf/cosmo/manager/ProvisioningManagerTest.java Wed Apr 13 16:50:27 2005
@@ -47,16 +47,22 @@
User user = TestHelper.makeDummyUser();
mgr.saveUser(user);
- User user2 = mgr.getUser(user.getUsername());
+ // by id
+ User user2 = mgr.getUser(user.getId().toString());
assertTrue(user.equals(user2));
- user2.setPassword("new password");
- User user3 = mgr.updateUser(user2);
- assertTrue(! user.getPassword().equals(user3.getPassword()));
+ // by username
+ User user3 = mgr.getUserByUsername(user.getUsername());
+ assertTrue(user.equals(user2));
+
+ user3.setPassword("new password");
+ User user4 = mgr.updateUser(user3);
+ assertTrue(user4.getPassword().equals(user3.getPassword()));
+ assertTrue(! user4.getPassword().equals(user.getPassword()));
- mgr.removeUser(user.getUsername());
+ mgr.removeUser(user.getId().toString());
try {
- mgr.getUser(user.getUsername());
+ mgr.getUser(user.getId().toString());
fail("user not removed");
} catch (DataRetrievalFailureException e) {
// expected
Index: server/core/src/org/osaf/cosmo/dao/hibernate/RoleDAOHibernate.java
diff -u server/core/src/org/osaf/cosmo/dao/hibernate/RoleDAOHibernate.java:1.1 server/core/src/org/osaf/cosmo/dao/hibernate/RoleDAOHibernate.java:1.2
--- server/core/src/org/osaf/cosmo/dao/hibernate/RoleDAOHibernate.java:1.1 Fri Apr 8 16:53:22 2005
+++ server/core/src/org/osaf/cosmo/dao/hibernate/RoleDAOHibernate.java Wed Apr 13 16:50:25 2005
@@ -6,6 +6,8 @@
import java.util.Date;
import java.util.List;
+import net.sf.hibernate.Hibernate;
+
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -23,6 +25,10 @@
private static final String HQL_GET_ROLES =
"from Role order by name";
+ private static final String HQL_GET_ROLE_BY_NAME =
+ "from Role where name=?";
+ private static final String HQL_DELETE_ROLE =
+ "from Role where id=?";
/**
*/
@@ -32,16 +38,27 @@
/**
*/
- public Role getRole(String rolename) {
- Role role = (Role) getHibernateTemplate().get(Role.class, rolename);
+ public Role getRole(Long id) {
+ Role role = (Role) getHibernateTemplate().get(Role.class, id);
if (role == null) {
- throw new ObjectRetrievalFailureException(Role.class, rolename);
+ throw new ObjectRetrievalFailureException(Role.class, id);
}
return role;
}
/**
*/
+ public Role getRole(String rolename) {
+ List roles = getHibernateTemplate().find(HQL_GET_ROLE_BY_NAME,
+ rolename);
+ if (roles.isEmpty()) {
+ throw new ObjectRetrievalFailureException(Role.class, rolename);
+ }
+ return (Role) roles.iterator().next();
+ }
+
+ /**
+ */
public void saveRole(Role role) {
role.setDateModified(new Date());
role.setDateCreated(role.getDateModified());
@@ -57,14 +74,13 @@
/**
*/
- public void removeRole(String rolename) {
- Object role = getHibernateTemplate().load(Role.class, rolename);
- getHibernateTemplate().delete(role);
+ public void removeRole(Long id) {
+ getHibernateTemplate().delete(HQL_DELETE_ROLE, id, Hibernate.LONG);
}
/**
*/
public void removeRole(Role role) {
- removeRole(role.getName());
+ removeRole(role.getId());
}
}
Index: server/core/src/org/osaf/cosmo/dao/RoleDAO.java
diff -u server/core/src/org/osaf/cosmo/dao/RoleDAO.java:1.1 server/core/src/org/osaf/cosmo/dao/RoleDAO.java:1.2
--- server/core/src/org/osaf/cosmo/dao/RoleDAO.java:1.1 Fri Apr 8 16:53:21 2005
+++ server/core/src/org/osaf/cosmo/dao/RoleDAO.java Wed Apr 13 16:50:24 2005
@@ -18,6 +18,10 @@
/**
*/
+ public Role getRole(Long id);
+
+ /**
+ */
public Role getRole(String rolename);
/**
@@ -30,7 +34,7 @@
/**
*/
- public void removeRole(String rolename);
+ public void removeRole(Long id);
/**
*/
Index: server/core/etc/User.hbm.xml
diff -u server/core/etc/User.hbm.xml:1.1 server/core/etc/User.hbm.xml:1.2
--- server/core/etc/User.hbm.xml:1.1 Tue Apr 12 16:27:29 2005
+++ server/core/etc/User.hbm.xml Wed Apr 13 16:50:24 2005
@@ -11,51 +11,61 @@
dynamic-insert="false"
select-before-update="false"
optimistic-lock="version">
-
- <id name="username"
- type="java.lang.String"
+ <id name="id"
+ type="java.lang.Long"
unsaved-value="null">
- <column name="username"
- length="32"
+ <column name="id"
not-null="true"
- sql-type="string"/>
- <generator class="assigned"/>
+ sql-type="long"/>
+ <generator class="native"/>
</id>
+ <property name="username"
+ type="java.lang.String"
+ update="true"
+ insert="true"
+ access="property"
+ column="username"
+ length="32"
+ not-null="true"/>
<property name="password"
type="java.lang.String"
update="true"
insert="true"
access="property"
column="password"
- length="32"/>
+ length="32"
+ not-null="true"/>
<property name="email"
type="java.lang.String"
update="true"
insert="true"
access="property"
column="email"
- length="32"/>
+ length="32"
+ not-null="true"/>
<property name="dateCreated"
type="java.util.Date"
- update="true"
+ update="false"
insert="true"
access="property"
- column="dateCreated"/>
+ column="dateCreated"
+ not-null="true"/>
<property name="dateModified"
type="java.util.Date"
update="true"
insert="true"
access="property"
- column="dateModified"/>
+ column="dateModified"
+ not-null="true"/>
<set name="roles"
table="userrole"
lazy="true"
inverse="false"
cascade="none"
sort="unsorted">
- <key column="username"/>
+ <key column="userid"/>
<many-to-many class="org.osaf.cosmo.model.Role"
- column="rolename"
+ column="roleid"
outer-join="auto"/>
</set>
</class>
Index: server/web/src/org/osaf/cosmo/ui/UserAction.java
diff -u server/web/src/org/osaf/cosmo/ui/UserAction.java:1.4 server/web/src/org/osaf/cosmo/ui/UserAction.java:1.5
--- server/web/src/org/osaf/cosmo/ui/UserAction.java:1.4 Tue Apr 12 14:58:24 2005
+++ server/web/src/org/osaf/cosmo/ui/UserAction.java Wed Apr 13 16:50:28 2005
@@ -41,6 +41,11 @@
*/
public static final String PARAM_USERNAME = "username";
/**
+ * The request parameter that contains the id identifying a
+ * user.
+ */
+ public static final String PARAM_ID = "id";
+ /**
* The request attribute in which this action places an
* identified User: <code>User</code>
*/
@@ -52,12 +57,16 @@
public static final String ATTR_USERS = "Users";
/**
* The request attribute in which this action places a sorted
- * String array of the names of the roles to which a user can be
- * assigned.
+ * List of the Roles to which a user can be assigned.
*/
public static final String ATTR_ROLES = "Roles";
/**
* The form attribute in which this action expects to find the
+ * id: <code>id</code>
+ */
+ public static final String FORMATTR_ID = "id";
+ /**
+ * The form attribute in which this action expects to find the
* username: <code>username</code>
*/
public static final String FORMATTR_USERNAME = "username";
@@ -80,8 +89,9 @@
public static final String FORMATTR_CONFIRM = "confirm";
/**
* The form attribute in which this action expects to find the
- * names of the roles to which the user will be assigned when
- * handling a form submission: * <code>role</code>
+ * ids of the roles to which the user will be assigned when
+ * handling a form submission (represented as a
+ * <code>String[]</code>: * <code>role</code>
*/
public static final String FORMATTR_ROLE = "role";
@@ -104,20 +114,26 @@
DynaActionForm userForm = (DynaActionForm) form;
// the User may have previously been set by a request
- // attribute. if not, the username should be available as a
- // request parameter.
+ // attribute. if not, look to see if the form has id info. if
+ // not, we're viewing the user for the first time.
User user = (User) request.getAttribute(ATTR_USER);
if (user == null) {
- String username = request.getParameter(PARAM_USERNAME);
- if (log.isDebugEnabled()) {
- log.debug("viewing user " + username);
+ String id = (String) userForm.get(FORMATTR_ID);
+ if (id != null && ! id.equals("")) {
+ user = mgr.getUser(id);
+ }
+ else {
+ String username = request.getParameter(PARAM_USERNAME);
+ if (log.isDebugEnabled()) {
+ log.debug("viewing user " + username);
+ }
+ user = mgr.getUserByUsername(username);
+ populateUpdateForm(userForm, user);
}
- user = mgr.getUser(username);
- populateForm(userForm, user);
}
request.setAttribute(ATTR_USER, user);
- request.setAttribute(ATTR_ROLES, getSortedRoleNames());
+ request.setAttribute(ATTR_ROLES, getSortedRoles());
addTitleParam(request, user.getUsername());
@@ -163,13 +179,12 @@
DynaActionForm userForm = (DynaActionForm) form;
if (isCancelled(request)) {
- resetForm(userForm);
+ resetUpdateForm(userForm);
return mapping.findForward(OSAFStrutsConstants.FWD_CANCEL);
}
try {
- User formUser =
- mgr.getUser((String) userForm.get(FORMATTR_USERNAME));
+ User formUser = mgr.getUser((String) userForm.get(FORMATTR_ID));
populateUser(formUser, userForm);
if (log.isDebugEnabled()) {
log.debug("updating user " + formUser.getUsername());
@@ -194,13 +209,13 @@
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
- String username = request.getParameter(PARAM_USERNAME);
+ String id = request.getParameter(PARAM_ID);
- if (username != null) {
+ if (id != null) {
if (log.isDebugEnabled()) {
- log.debug("removing user " + username);
+ log.debug("removing user " + id);
}
- mgr.removeUser(username);
+ mgr.removeUser(id);
saveConfirmationMessage(request, MSG_CONFIRM_REMOVE);
}
@@ -222,12 +237,13 @@
// selection
if (request.getParameter(OSAFStrutsConstants.PARAM_BUTTON_CREATE) ==
null) {
- String[] rolenames = { CosmoSecurityManager.ROLE_USER };
- userForm.set(FORMATTR_ROLE, rolenames);
+ Role userRole = mgr.getRoleByName(CosmoSecurityManager.ROLE_USER);
+ String[] roleIds = { userRole.getId().toString() };
+ userForm.set(FORMATTR_ROLE, roleIds);
}
request.setAttribute(ATTR_USERS, getSortedUsers());
- request.setAttribute(ATTR_ROLES, getSortedRoleNames());
+ request.setAttribute(ATTR_ROLES, getSortedRoles());
return mapping.findForward(OSAFStrutsConstants.FWD_OK);
}
@@ -251,55 +267,55 @@
return users;
}
- private String[] getSortedRoleNames() {
+ private List getSortedRoles() {
if (log.isDebugEnabled()) {
log.debug("listing roles");
}
List roles = mgr.getRoles();
Collections.sort(roles);
-
- return mapRolesToRolenames((Role[]) roles.toArray(new Role[0]));
+ return roles;
}
private void populateUser(User user, DynaActionForm form) {
- user.setUsername((String) form.get(FORMATTR_USERNAME));
+ if (user.getId() == null) {
+ user.setUsername((String) form.get(FORMATTR_USERNAME));
+ }
user.setEmail((String) form.get(FORMATTR_EMAIL));
user.setPassword((String) form.get(FORMATTR_PASSWORD));
- String[] roles = (String[]) form.get(FORMATTR_ROLE);
+ String[] roleIds = (String[]) form.get(FORMATTR_ROLE);
HashMap idx = new HashMap();
- for (int i=0; i<roles.length; i++) {
- Role role = mgr.getRole(roles[i]);
- idx.put(role.getName(), role);
+ for (int i=0; i<roleIds.length; i++) {
+ Role role = mgr.getRole(roleIds[i]);
+ idx.put(roleIds[i], role);
user.addRole(role);
}
for (Iterator i=user.getRoles().iterator(); i.hasNext();) {
Role role = (Role) i.next();
- if (idx.get(role.getName()) == null) {
+ if (idx.get(role.getId().toString()) == null) {
i.remove();
}
}
}
- private void populateForm(DynaActionForm form, User user) {
- form.set(FORMATTR_USERNAME, user.getUsername());
+ private void populateUpdateForm(DynaActionForm form, User user) {
+ form.set(FORMATTR_ID, user.getId().toString());
form.set(FORMATTR_EMAIL, user.getEmail());
// never set password in the form
Role[] roles = (Role[]) user.getRoles().toArray(new Role[0]);
- form.set(FORMATTR_ROLE, mapRolesToRolenames(roles));
+ form.set(FORMATTR_ROLE, mapRolesToRoleIds(roles));
}
- private void resetForm(DynaActionForm form) {
- form.set(FORMATTR_USERNAME, null);
+ private void resetUpdateForm(DynaActionForm form) {
form.set(FORMATTR_EMAIL, null);
form.set(FORMATTR_PASSWORD, null);
form.set(FORMATTR_ROLE, new String[0]);
}
- private String[] mapRolesToRolenames(Role[] roles) {
- String[] rolenames = new String[roles.length];
+ private String[] mapRolesToRoleIds(Role[] roles) {
+ String[] roleIds = new String[roles.length];
for (int i=0; i<roles.length; i++) {
- rolenames[i] = roles[i].getName();
+ roleIds[i] = roles[i].getId().toString();
}
- return rolenames;
+ return roleIds;
}
}
More information about the Commits
mailing list