+ /** @return path to the user home node */
+ protected String mapLdapToJcr(String username, DirContextOperations ctx) {
+ try {
+ Node userHome = JcrUtils.getUserHome(session, username);
+ if (userHome == null)
+ userHome = JcrUtils.createUserHome(session, homeBasePath,
+ username);
+ String userHomePath = userHome.getPath();
+ Node userProfile = userHome.getNode(ARGEO_PROFILE);
+ if (userHome.hasNode(ARGEO_PROFILE)) {
+ userProfile = userHome.getNode(ARGEO_PROFILE);
+ } else {
+ userProfile = userHome.addNode(ARGEO_PROFILE);
+ userProfile.addMixin(NodeType.MIX_TITLE);
+ userProfile.addMixin(NodeType.MIX_CREATED);
+ userProfile.addMixin(NodeType.MIX_LAST_MODIFIED);
+ }
+
+ for (String jcrProperty : propertyToAttributes.keySet())
+ ldapToJcr(userProfile, jcrProperty, ctx);
+
+ // assign default values
+ if (!userProfile.hasProperty(Property.JCR_DESCRIPTION))
+ userProfile.setProperty(Property.JCR_DESCRIPTION, "");
+ if (!userProfile.hasProperty(Property.JCR_TITLE))
+ userProfile.setProperty(Property.JCR_TITLE, userProfile
+ .getProperty(ARGEO_FIRST_NAME).getString()
+ + " "
+ + userProfile.getProperty(ARGEO_LAST_NAME).getString());
+
+ session.save();
+ if (log.isTraceEnabled())
+ log.trace("Mapped " + ctx.getDn() + " to " + userProfile);
+ return userHomePath;
+ } catch (Exception e) {
+ JcrUtils.discardQuietly(session);
+ throw new ArgeoException("Cannot synchronize JCR and LDAP", e);
+ }
+ }
+