/** @param p The person context to set. */ public void setPerson(final Node p) { // perform the set in a txn as certain bean calls require it FacesContext context = FacesContext.getCurrentInstance(); RetryingTransactionHelper txnHelper = Repository.getRetryingTransactionHelper(context); RetryingTransactionCallback callback = new RetryingTransactionCallback() { public Object execute() throws Throwable { person = p; userName = (String) person.getProperties().get(ContentModel.PROP_USERNAME); // rebuild the property immutability map helper object immutabilty = new PropertyImmutabilityMap( getUserRegistrySynchronizer().getPersonMappedProperties(userName)); return null; } }; try { txnHelper.doInTransaction(callback, false); } catch (Throwable e) { // reset the flag so we can re-attempt the operation if (e instanceof ReportedException == false) { Utils.addErrorMessage(e.getMessage(), e); } ReportedException.throwIfNecessary(e); } }
@Override protected String finishImpl(FacesContext context, String outcome) throws Throwable { // TODO: implement create new Person object from specified details try { if (!this.password.equals(this.confirm)) { Utils.addErrorMessage(Application.getMessage(context, UsersDialog.ERROR_PASSWORD_MATCH)); outcome = null; } if (checkTenantUserName() == false) { outcome = null; } if (outcome != null) { // create properties for Person type from submitted Form data Map<QName, Serializable> props = new HashMap<QName, Serializable>(7, 1.0f); setPersonPropertiesAndCreateHomeSpaceIfNeeded(props, null, context); // create the node to represent the Person getPersonService().createPerson(props); // ensure the user can access their own Person object // getPermissionService().setPermission(newPerson, this.userName, // getPermissionService().getAllPermission(), true); // Not required - now done by the person service. if (logger.isDebugEnabled()) logger.debug("Created Person node for username: "******"Created User Authentication instance for username: " + this.userName); if ((this.sizeQuota != null) && (this.sizeQuota < 0L)) { Utils.addErrorMessage( MessageFormat.format( Application.getMessage(context, UsersDialog.ERROR_NEGATIVE_QUOTA), this.sizeQuota)); outcome = null; } else { putSizeQuotaProperty(this.userName, this.sizeQuota, this.sizeQuotaUnits); } } invalidateUserList(); } catch (Throwable e) { Utils.addErrorMessage( MessageFormat.format( Application.getMessage(FacesContext.getCurrentInstance(), ERROR), e.getMessage()), e); outcome = null; this.isFinished = false; ReportedException.throwIfNecessary(e); } if (outcome == null) { this.isFinished = false; } return outcome; }