Principal principal = SecurityHelper.getBestPrincipal(subject, UserPrincipal.class);
if (principal == null)
{
String errorMessage = "Could not create user home for null principal";
log.error(errorMessage);
throw new NodeException(errorMessage);
}
try
{
String userName = principal.getName();
// get user home
Folder newUserFolder;
if (pageManager.userFolderExists(userName))
{
newUserFolder = pageManager.getUserFolder(userName);
}
else
{
newUserFolder = pageManager.newFolder(Folder.USER_FOLDER + userName);
SecurityConstraints constraints = pageManager.newSecurityConstraints();
newUserFolder.setSecurityConstraints(constraints);
newUserFolder.getSecurityConstraints().setOwner(userName);
pageManager.updateFolder(newUserFolder);
}
// for each role for a user, deep copy the folder contents for that role
// into the user's home
// TODO: this algorithm could actually merge pages on dups
Iterator roles = SecurityHelper.getPrincipals(subject, RolePrincipal.class).iterator();
while (roles.hasNext())
{
RolePrincipal role = (RolePrincipal)roles.next();
if (pageManager.folderExists(Folder.ROLE_FOLDER + role.getName()))
{
Folder roleFolder = pageManager.getFolder(Folder.ROLE_FOLDER + role.getName());
deepMergeFolder(pageManager, roleFolder, Folder.USER_FOLDER + newUserFolder.getName(), userName, role.getName());
}
}
}
catch (Exception e)
{
String errorMessage = "createUserHomePagesFromRoles failed: " + e.getMessage();
log.error(errorMessage, e);
throw new NodeException(errorMessage, e);
}
}