in extensions/torque/src/java/org/apache/turbine/services/security/torque/TorqueSecurityService.java [778:826]
public synchronized Role addRole(Role role)
throws DataBackendException, EntityExistsException
{
boolean roleExists = false;
if (StringUtils.isEmpty(role.getName()))
{
throw new DataBackendException("Could not create "
+ "a role with empty name!");
}
try
{
lockExclusive();
roleExists = checkExists(role);
if (!roleExists)
{
// add a row to the table
Criteria criteria = RolePeerManager.buildCriteria(role);
RolePeerManager.doInsert(criteria);
// try to get the object back using the name as key.
criteria = new Criteria();
criteria.add(RolePeerManager.getNameColumn(), role.getName());
List results = RolePeerManager.doSelect(criteria);
if (results.size() != 1)
{
throw new DataBackendException(
"Internal error - query returned "
+ results.size() + " rows");
}
Role newRole = (Role) results.get(0);
// add the role to system-wide cache
getAllRoles().add(newRole);
// return the object with correct id
return newRole;
}
}
catch (Exception e)
{
throw new DataBackendException("addRole(Role) failed", e);
}
finally
{
unlockExclusive();
}
// the only way we could get here without return/throw tirggered
// is that the roleExists was true.
throw new EntityExistsException("Role '" + role + "' already exists");
}