Source: authorization/user.js

/**
 * Copyright© 2016, Oracle and/or its affiliates. All rights reserved.
 * Created by ddrobins on 7/28/15.
 */

/**
 * Class that enables you to retrieve information on the current user and manage its properties. Callers should use
 * MobileBackend's [User()]{@link MobileBackend#User} property.
 * @constructor
 * @global
 */
function User(user) {


  var _id = user.id;
  var _userName = user.username;
  var firstName = user.firstName;
  var lastName = user.lastName;
  var email = user.email;

  var _properties = {};

  for (var key in user) {
    if (["id", "username", "firstName", "lastName", "email"].indexOf(key) < 0) {
      _properties[key] = user[key];
    }
    if(_properties.links != null) {
      delete _properties.links;
    }
  }

  /**
   * Returns the current user's name.
   *
   * @return Current user's name
   */
  this.getId = function(){
    return _id;
  };


  /**
   * Returns the current user's name.
   *
   * @return Current user's name
   */
  this.getUsername = function(){
    return _userName;
  };
  /**
   * Sets username for current user.
   *
   * @param username Properties associated with current user
   */
  this.setUsername = function(username){
    _userName = username;
  };

  /**
   * Returns the properties of current user.
   *
   * @return properties {} of current user
   */
  this.getProperties  = function(){
    return _properties;
  };
  /**
   * Sets properties for current user.
   *
   * @param key {String} the key in the properties object
   * @param value {String} the value of the key in the properties object
   *
   */
  this.setProperties = function(key,value){
    var obj = this.getProperties(); //outside (non-recursive) call, use "data" as our base object
    var ka = key.split(/\./); //split the key by the dots
    if (ka.length < 2) {
      obj[ka[0]] = value; //only one part (no dots) in key, just set value
    } else {
      if (!obj[ka[0]]) obj[ka[0]] = {}; //create our "new" base obj if it doesn't exist
      obj = obj[ka.shift()]; //remove the new "base" obj from string array, and hold actual object for recursive call
      this.setProperties(ka.join("."),value); //join the remaining parts back up with dots, and recursively set data on our new "base" obj
    }
  };

  /**
   * Returns first name for current user.
   */
  this.getFirstName = function(){
    return firstName;
  };

  /**
   * Sets first name for current user.
   *
   * @param firstname Properties associated with current user
   */
  this.setFirstName = function(firstname){
    firstName = firstname;
  };

  /**
   * Returns last name for current user.
   */
  this.getLastName = function(){
    return lastName;
  };

  /**
   * Sets last name for current user.
   *
   * @param lastname Properties associated with current user
   */
  this.setLastName = function(lastname){
    lastName = lastname;
  };

  /**
   * Returns email address for current user.
   */
  this.getEmail = function(){
    return email;
  };

  /**
   * Sets the email address property of current user.
   *
   * @return email properties of current user
   */
  this.setEmail = function(Email){
    email = Email;
  };

  // TODO: More protected way to edit password of User Object
  /**
   * Sets password for current user.
   *
   * @param password Properties associated with current user
   */
  //this.setPassword = function(password){
  //  this.password = password;
  //};

  /**
   * Returns the password property for current user.
   */
  //this.getPassword = function(){
  //  return this.password;
  //};

}