+ private Node getNode(SuiteUi ui, Event event) {
+ String nodePath = get(event, SuiteEvent.NODE_PATH);
+ String workspaceName = get(event, SuiteEvent.WORKSPACE);
+ Session session = ui.getSession(workspaceName);
+ Node node;
+ if (nodePath == null) {
+ // look for a user
+ String username = get(event, SuiteEvent.USERNAME);
+ if (username == null)
+ return null;
+ User user = cmsUserManager.getUser(username);
+ if (user == null)
+ return null;
+ LdapName userDn;
+ try {
+ userDn = new LdapName(user.getName());
+ } catch (InvalidNameException e) {
+ throw new IllegalArgumentException("Badly formatted username", e);
+ }
+ String userNodePath = SuiteUtils.getUserNodePath(userDn);
+ if (Jcr.itemExists(session, userNodePath))
+ node = Jcr.getNode(session, userNodePath);
+ else {
+ Session adminSession = null;
+ try {
+ adminSession = NodeUtils.openDataAdminSession(getRepository(), workspaceName);
+ SuiteUtils.getOrCreateUserNode(adminSession, userDn);
+ } finally {
+ Jcr.logout(adminSession);
+ }
+ node = Jcr.getNode(session, userNodePath);
+ }
+ } else {
+ node = Jcr.getNode(session, nodePath);
+ }
+ return node;