public Map<String, Object> update( final JsonCommand command, final PlatformPasswordEncoder platformPasswordEncoder) { final Map<String, Object> actualChanges = new LinkedHashMap<String, Object>(7); // unencoded password provided final String passwordParamName = "password"; final String passwordEncodedParamName = "passwordEncoded"; if (command.hasParameter(passwordParamName)) { if (command.isChangeInPasswordParameterNamed( passwordParamName, this.password, platformPasswordEncoder, this.getId())) { final String passwordEncodedValue = command.passwordValueOfParameterNamed( passwordParamName, platformPasswordEncoder, this.getId()); actualChanges.put(passwordEncodedParamName, passwordEncodedValue); updatePassword(passwordEncodedValue); } } if (command.hasParameter(passwordEncodedParamName)) { if (command.isChangeInStringParameterNamed(passwordEncodedParamName, this.password)) { final String newValue = command.stringValueOfParameterNamed(passwordEncodedParamName); actualChanges.put(passwordEncodedParamName, newValue); updatePassword(newValue); } } final String officeIdParamName = "officeId"; if (command.isChangeInLongParameterNamed(officeIdParamName, this.office.getId())) { final Long newValue = command.longValueOfParameterNamed(officeIdParamName); actualChanges.put(officeIdParamName, newValue); } final String rolesParamName = "roles"; if (command.isChangeInArrayParameterNamed(rolesParamName, getRolesAsIdStringArray())) { final String[] newValue = command.arrayValueOfParameterNamed(rolesParamName); actualChanges.put(rolesParamName, newValue); } final String usernameParamName = "username"; if (command.isChangeInStringParameterNamed(usernameParamName, this.username)) { final String newValue = command.stringValueOfParameterNamed(usernameParamName); actualChanges.put(usernameParamName, newValue); this.username = newValue; } final String firstnameParamName = "firstname"; if (command.isChangeInStringParameterNamed(firstnameParamName, this.firstname)) { final String newValue = command.stringValueOfParameterNamed(firstnameParamName); actualChanges.put(firstnameParamName, newValue); this.firstname = newValue; } final String lastnameParamName = "lastname"; if (command.isChangeInStringParameterNamed(lastnameParamName, this.lastname)) { final String newValue = command.stringValueOfParameterNamed(lastnameParamName); actualChanges.put(lastnameParamName, newValue); this.lastname = newValue; } final String emailParamName = "email"; if (command.isChangeInStringParameterNamed(emailParamName, this.email)) { final String newValue = command.stringValueOfParameterNamed(emailParamName); actualChanges.put(emailParamName, newValue); this.email = newValue; } return actualChanges; }