/*
 * Swagger of Opencellsoft Api
 * @#Introduction
 *
 * The version of the OpenAPI document: 7.3.1-SNAPSHOT
 * Contact: contact@opencellsoft.fr
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */


package org.openapitools.client.model;

import java.util.Objects;
import java.util.Arrays;
import com.google.gson.TypeAdapter;
import com.google.gson.annotations.JsonAdapter;
import com.google.gson.annotations.SerializedName;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.openapitools.client.model.AddressBook;
import org.openapitools.client.model.Auditable;
import org.openapitools.client.model.AuditableFieldHistory;
import org.openapitools.client.model.CustomFieldValues;
import org.openapitools.client.model.ICustomFieldEntity;
import org.openapitools.client.model.Name;
import org.openapitools.client.model.Role;
import org.openapitools.client.model.SecuredEntity;
import org.openapitools.client.model.UserHierarchyLevel;
import org.threeten.bp.OffsetDateTime;

/**
 * User
 */
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2019-09-13T10:03:17.753Z[GMT]")
public class User {
  public static final String SERIALIZED_NAME_ID = "id";
  @SerializedName(SERIALIZED_NAME_ID)
  private Long id;

  public static final String SERIALIZED_NAME_VERSION = "version";
  @SerializedName(SERIALIZED_NAME_VERSION)
  private Integer version;

  public static final String SERIALIZED_NAME_AUDITABLE = "auditable";
  @SerializedName(SERIALIZED_NAME_AUDITABLE)
  private Auditable auditable;

  public static final String SERIALIZED_NAME_HISTORIZED = "historized";
  @SerializedName(SERIALIZED_NAME_HISTORIZED)
  private Boolean historized;

  public static final String SERIALIZED_NAME_NOTIFIED = "notified";
  @SerializedName(SERIALIZED_NAME_NOTIFIED)
  private Boolean notified;

  public static final String SERIALIZED_NAME_AUDITABLE_FIELDS = "auditableFields";
  @SerializedName(SERIALIZED_NAME_AUDITABLE_FIELDS)
  private List<AuditableFieldHistory> auditableFields = null;

  public static final String SERIALIZED_NAME_NAME = "name";
  @SerializedName(SERIALIZED_NAME_NAME)
  private Name name;

  public static final String SERIALIZED_NAME_USER_NAME = "userName";
  @SerializedName(SERIALIZED_NAME_USER_NAME)
  private String userName;

  public static final String SERIALIZED_NAME_ADDRESSBOOK = "addressbook";
  @SerializedName(SERIALIZED_NAME_ADDRESSBOOK)
  private AddressBook addressbook;

  public static final String SERIALIZED_NAME_EMAIL = "email";
  @SerializedName(SERIALIZED_NAME_EMAIL)
  private String email;

  public static final String SERIALIZED_NAME_ROLES = "roles";
  @SerializedName(SERIALIZED_NAME_ROLES)
  private List<Role> roles = null;

  public static final String SERIALIZED_NAME_USER_LEVEL = "userLevel";
  @SerializedName(SERIALIZED_NAME_USER_LEVEL)
  private UserHierarchyLevel userLevel;

  public static final String SERIALIZED_NAME_SECURED_ENTITIES = "securedEntities";
  @SerializedName(SERIALIZED_NAME_SECURED_ENTITIES)
  private List<SecuredEntity> securedEntities = null;

  public static final String SERIALIZED_NAME_UUID = "uuid";
  @SerializedName(SERIALIZED_NAME_UUID)
  private String uuid;

  public static final String SERIALIZED_NAME_CF_VALUES = "cfValues";
  @SerializedName(SERIALIZED_NAME_CF_VALUES)
  private CustomFieldValues cfValues;

  public static final String SERIALIZED_NAME_CF_ACCUMULATED_VALUES = "cfAccumulatedValues";
  @SerializedName(SERIALIZED_NAME_CF_ACCUMULATED_VALUES)
  private CustomFieldValues cfAccumulatedValues;

  public static final String SERIALIZED_NAME_SECURED_ENTITIES_MAP = "securedEntitiesMap";
  @SerializedName(SERIALIZED_NAME_SECURED_ENTITIES_MAP)
  private Map<String, List<SecuredEntity>> securedEntitiesMap = null;

  public static final String SERIALIZED_NAME_LAST_LOGIN_DATE = "lastLoginDate";
  @SerializedName(SERIALIZED_NAME_LAST_LOGIN_DATE)
  private OffsetDateTime lastLoginDate;

  public static final String SERIALIZED_NAME_CODE = "code";
  @SerializedName(SERIALIZED_NAME_CODE)
  private String code;

  public static final String SERIALIZED_NAME_DESCRIPTION = "description";
  @SerializedName(SERIALIZED_NAME_DESCRIPTION)
  private String description;

  public static final String SERIALIZED_NAME_REFERENCE_CODE = "referenceCode";
  @SerializedName(SERIALIZED_NAME_REFERENCE_CODE)
  private String referenceCode;

  public static final String SERIALIZED_NAME_REFERENCE_DESCRIPTION = "referenceDescription";
  @SerializedName(SERIALIZED_NAME_REFERENCE_DESCRIPTION)
  private String referenceDescription;

  public static final String SERIALIZED_NAME_PARENT_C_F_ENTITIES = "parentCFEntities";
  @SerializedName(SERIALIZED_NAME_PARENT_C_F_ENTITIES)
  private List<ICustomFieldEntity> parentCFEntities = null;

  public static final String SERIALIZED_NAME_ROLES_LABEL = "rolesLabel";
  @SerializedName(SERIALIZED_NAME_ROLES_LABEL)
  private String rolesLabel;

  public static final String SERIALIZED_NAME_ROLE_SECURED_ENTITIES = "roleSecuredEntities";
  @SerializedName(SERIALIZED_NAME_ROLE_SECURED_ENTITIES)
  private List<SecuredEntity> roleSecuredEntities = null;

  public static final String SERIALIZED_NAME_ALL_SECURED_ENTITIES = "allSecuredEntities";
  @SerializedName(SERIALIZED_NAME_ALL_SECURED_ENTITIES)
  private List<SecuredEntity> allSecuredEntities = null;

  public static final String SERIALIZED_NAME_NAME_OR_USERNAME = "nameOrUsername";
  @SerializedName(SERIALIZED_NAME_NAME_OR_USERNAME)
  private String nameOrUsername;

  public static final String SERIALIZED_NAME_CF_VALUES_NULL_SAFE = "cfValuesNullSafe";
  @SerializedName(SERIALIZED_NAME_CF_VALUES_NULL_SAFE)
  private CustomFieldValues cfValuesNullSafe;

  public static final String SERIALIZED_NAME_CF_VALUES_AS_VALUES = "cfValuesAsValues";
  @SerializedName(SERIALIZED_NAME_CF_VALUES_AS_VALUES)
  private Map<String, Object> cfValuesAsValues = null;

  public static final String SERIALIZED_NAME_CF_ACCUMULATED_VALUES_NULL_SAFE = "cfAccumulatedValuesNullSafe";
  @SerializedName(SERIALIZED_NAME_CF_ACCUMULATED_VALUES_NULL_SAFE)
  private CustomFieldValues cfAccumulatedValuesNullSafe;

  public static final String SERIALIZED_NAME_TRANSIENT = "transient";
  @SerializedName(SERIALIZED_NAME_TRANSIENT)
  private Boolean _transient;


  public User id(Long id) {
    
    this.id = id;
    return this;
  }

   /**
   * Get id
   * @return id
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public Long getId() {
    return id;
  }



  public void setId(Long id) {
    this.id = id;
  }


  public User version(Integer version) {
    
    this.version = version;
    return this;
  }

   /**
   * Get version
   * @return version
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public Integer getVersion() {
    return version;
  }



  public void setVersion(Integer version) {
    this.version = version;
  }


  public User auditable(Auditable auditable) {
    
    this.auditable = auditable;
    return this;
  }

   /**
   * Get auditable
   * @return auditable
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public Auditable getAuditable() {
    return auditable;
  }



  public void setAuditable(Auditable auditable) {
    this.auditable = auditable;
  }


  public User historized(Boolean historized) {
    
    this.historized = historized;
    return this;
  }

   /**
   * Get historized
   * @return historized
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public Boolean getHistorized() {
    return historized;
  }



  public void setHistorized(Boolean historized) {
    this.historized = historized;
  }


  public User notified(Boolean notified) {
    
    this.notified = notified;
    return this;
  }

   /**
   * Get notified
   * @return notified
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public Boolean getNotified() {
    return notified;
  }



  public void setNotified(Boolean notified) {
    this.notified = notified;
  }


  public User auditableFields(List<AuditableFieldHistory> auditableFields) {
    
    this.auditableFields = auditableFields;
    return this;
  }

  public User addAuditableFieldsItem(AuditableFieldHistory auditableFieldsItem) {
    if (this.auditableFields == null) {
      this.auditableFields = new ArrayList<AuditableFieldHistory>();
    }
    this.auditableFields.add(auditableFieldsItem);
    return this;
  }

   /**
   * Get auditableFields
   * @return auditableFields
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public List<AuditableFieldHistory> getAuditableFields() {
    return auditableFields;
  }



  public void setAuditableFields(List<AuditableFieldHistory> auditableFields) {
    this.auditableFields = auditableFields;
  }


  public User name(Name name) {
    
    this.name = name;
    return this;
  }

   /**
   * Get name
   * @return name
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public Name getName() {
    return name;
  }



  public void setName(Name name) {
    this.name = name;
  }


  public User userName(String userName) {
    
    this.userName = userName;
    return this;
  }

   /**
   * Get userName
   * @return userName
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public String getUserName() {
    return userName;
  }



  public void setUserName(String userName) {
    this.userName = userName;
  }


  public User addressbook(AddressBook addressbook) {
    
    this.addressbook = addressbook;
    return this;
  }

   /**
   * Get addressbook
   * @return addressbook
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public AddressBook getAddressbook() {
    return addressbook;
  }



  public void setAddressbook(AddressBook addressbook) {
    this.addressbook = addressbook;
  }


  public User email(String email) {
    
    this.email = email;
    return this;
  }

   /**
   * Get email
   * @return email
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public String getEmail() {
    return email;
  }



  public void setEmail(String email) {
    this.email = email;
  }


  public User roles(List<Role> roles) {
    
    this.roles = roles;
    return this;
  }

  public User addRolesItem(Role rolesItem) {
    if (this.roles == null) {
      this.roles = new ArrayList<Role>();
    }
    this.roles.add(rolesItem);
    return this;
  }

   /**
   * Get roles
   * @return roles
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public List<Role> getRoles() {
    return roles;
  }



  public void setRoles(List<Role> roles) {
    this.roles = roles;
  }


  public User userLevel(UserHierarchyLevel userLevel) {
    
    this.userLevel = userLevel;
    return this;
  }

   /**
   * Get userLevel
   * @return userLevel
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public UserHierarchyLevel getUserLevel() {
    return userLevel;
  }



  public void setUserLevel(UserHierarchyLevel userLevel) {
    this.userLevel = userLevel;
  }


  public User securedEntities(List<SecuredEntity> securedEntities) {
    
    this.securedEntities = securedEntities;
    return this;
  }

  public User addSecuredEntitiesItem(SecuredEntity securedEntitiesItem) {
    if (this.securedEntities == null) {
      this.securedEntities = new ArrayList<SecuredEntity>();
    }
    this.securedEntities.add(securedEntitiesItem);
    return this;
  }

   /**
   * Get securedEntities
   * @return securedEntities
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public List<SecuredEntity> getSecuredEntities() {
    return securedEntities;
  }



  public void setSecuredEntities(List<SecuredEntity> securedEntities) {
    this.securedEntities = securedEntities;
  }


  public User uuid(String uuid) {
    
    this.uuid = uuid;
    return this;
  }

   /**
   * Get uuid
   * @return uuid
  **/
  @ApiModelProperty(required = true, value = "")

  public String getUuid() {
    return uuid;
  }



  public void setUuid(String uuid) {
    this.uuid = uuid;
  }


  public User cfValues(CustomFieldValues cfValues) {
    
    this.cfValues = cfValues;
    return this;
  }

   /**
   * Get cfValues
   * @return cfValues
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public CustomFieldValues getCfValues() {
    return cfValues;
  }



  public void setCfValues(CustomFieldValues cfValues) {
    this.cfValues = cfValues;
  }


  public User cfAccumulatedValues(CustomFieldValues cfAccumulatedValues) {
    
    this.cfAccumulatedValues = cfAccumulatedValues;
    return this;
  }

   /**
   * Get cfAccumulatedValues
   * @return cfAccumulatedValues
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public CustomFieldValues getCfAccumulatedValues() {
    return cfAccumulatedValues;
  }



  public void setCfAccumulatedValues(CustomFieldValues cfAccumulatedValues) {
    this.cfAccumulatedValues = cfAccumulatedValues;
  }


  public User securedEntitiesMap(Map<String, List<SecuredEntity>> securedEntitiesMap) {
    
    this.securedEntitiesMap = securedEntitiesMap;
    return this;
  }

  public User putSecuredEntitiesMapItem(String key, List<SecuredEntity> securedEntitiesMapItem) {
    if (this.securedEntitiesMap == null) {
      this.securedEntitiesMap = new HashMap<String, List<SecuredEntity>>();
    }
    this.securedEntitiesMap.put(key, securedEntitiesMapItem);
    return this;
  }

   /**
   * Get securedEntitiesMap
   * @return securedEntitiesMap
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public Map<String, List<SecuredEntity>> getSecuredEntitiesMap() {
    return securedEntitiesMap;
  }



  public void setSecuredEntitiesMap(Map<String, List<SecuredEntity>> securedEntitiesMap) {
    this.securedEntitiesMap = securedEntitiesMap;
  }


  public User lastLoginDate(OffsetDateTime lastLoginDate) {
    
    this.lastLoginDate = lastLoginDate;
    return this;
  }

   /**
   * Get lastLoginDate
   * @return lastLoginDate
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public OffsetDateTime getLastLoginDate() {
    return lastLoginDate;
  }



  public void setLastLoginDate(OffsetDateTime lastLoginDate) {
    this.lastLoginDate = lastLoginDate;
  }


  public User code(String code) {
    
    this.code = code;
    return this;
  }

   /**
   * Get code
   * @return code
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public String getCode() {
    return code;
  }



  public void setCode(String code) {
    this.code = code;
  }


  public User description(String description) {
    
    this.description = description;
    return this;
  }

   /**
   * Get description
   * @return description
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public String getDescription() {
    return description;
  }



  public void setDescription(String description) {
    this.description = description;
  }


  public User referenceCode(String referenceCode) {
    
    this.referenceCode = referenceCode;
    return this;
  }

   /**
   * Get referenceCode
   * @return referenceCode
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public String getReferenceCode() {
    return referenceCode;
  }



  public void setReferenceCode(String referenceCode) {
    this.referenceCode = referenceCode;
  }


  public User referenceDescription(String referenceDescription) {
    
    this.referenceDescription = referenceDescription;
    return this;
  }

   /**
   * Get referenceDescription
   * @return referenceDescription
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public String getReferenceDescription() {
    return referenceDescription;
  }



  public void setReferenceDescription(String referenceDescription) {
    this.referenceDescription = referenceDescription;
  }


  public User parentCFEntities(List<ICustomFieldEntity> parentCFEntities) {
    
    this.parentCFEntities = parentCFEntities;
    return this;
  }

  public User addParentCFEntitiesItem(ICustomFieldEntity parentCFEntitiesItem) {
    if (this.parentCFEntities == null) {
      this.parentCFEntities = new ArrayList<ICustomFieldEntity>();
    }
    this.parentCFEntities.add(parentCFEntitiesItem);
    return this;
  }

   /**
   * Get parentCFEntities
   * @return parentCFEntities
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public List<ICustomFieldEntity> getParentCFEntities() {
    return parentCFEntities;
  }



  public void setParentCFEntities(List<ICustomFieldEntity> parentCFEntities) {
    this.parentCFEntities = parentCFEntities;
  }


  public User rolesLabel(String rolesLabel) {
    
    this.rolesLabel = rolesLabel;
    return this;
  }

   /**
   * Get rolesLabel
   * @return rolesLabel
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public String getRolesLabel() {
    return rolesLabel;
  }



  public void setRolesLabel(String rolesLabel) {
    this.rolesLabel = rolesLabel;
  }


  public User roleSecuredEntities(List<SecuredEntity> roleSecuredEntities) {
    
    this.roleSecuredEntities = roleSecuredEntities;
    return this;
  }

  public User addRoleSecuredEntitiesItem(SecuredEntity roleSecuredEntitiesItem) {
    if (this.roleSecuredEntities == null) {
      this.roleSecuredEntities = new ArrayList<SecuredEntity>();
    }
    this.roleSecuredEntities.add(roleSecuredEntitiesItem);
    return this;
  }

   /**
   * Get roleSecuredEntities
   * @return roleSecuredEntities
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public List<SecuredEntity> getRoleSecuredEntities() {
    return roleSecuredEntities;
  }



  public void setRoleSecuredEntities(List<SecuredEntity> roleSecuredEntities) {
    this.roleSecuredEntities = roleSecuredEntities;
  }


  public User allSecuredEntities(List<SecuredEntity> allSecuredEntities) {
    
    this.allSecuredEntities = allSecuredEntities;
    return this;
  }

  public User addAllSecuredEntitiesItem(SecuredEntity allSecuredEntitiesItem) {
    if (this.allSecuredEntities == null) {
      this.allSecuredEntities = new ArrayList<SecuredEntity>();
    }
    this.allSecuredEntities.add(allSecuredEntitiesItem);
    return this;
  }

   /**
   * Get allSecuredEntities
   * @return allSecuredEntities
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public List<SecuredEntity> getAllSecuredEntities() {
    return allSecuredEntities;
  }



  public void setAllSecuredEntities(List<SecuredEntity> allSecuredEntities) {
    this.allSecuredEntities = allSecuredEntities;
  }


  public User nameOrUsername(String nameOrUsername) {
    
    this.nameOrUsername = nameOrUsername;
    return this;
  }

   /**
   * Get nameOrUsername
   * @return nameOrUsername
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public String getNameOrUsername() {
    return nameOrUsername;
  }



  public void setNameOrUsername(String nameOrUsername) {
    this.nameOrUsername = nameOrUsername;
  }


  public User cfValuesNullSafe(CustomFieldValues cfValuesNullSafe) {
    
    this.cfValuesNullSafe = cfValuesNullSafe;
    return this;
  }

   /**
   * Get cfValuesNullSafe
   * @return cfValuesNullSafe
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public CustomFieldValues getCfValuesNullSafe() {
    return cfValuesNullSafe;
  }



  public void setCfValuesNullSafe(CustomFieldValues cfValuesNullSafe) {
    this.cfValuesNullSafe = cfValuesNullSafe;
  }


  public User cfValuesAsValues(Map<String, Object> cfValuesAsValues) {
    
    this.cfValuesAsValues = cfValuesAsValues;
    return this;
  }

  public User putCfValuesAsValuesItem(String key, Object cfValuesAsValuesItem) {
    if (this.cfValuesAsValues == null) {
      this.cfValuesAsValues = new HashMap<String, Object>();
    }
    this.cfValuesAsValues.put(key, cfValuesAsValuesItem);
    return this;
  }

   /**
   * Get cfValuesAsValues
   * @return cfValuesAsValues
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public Map<String, Object> getCfValuesAsValues() {
    return cfValuesAsValues;
  }



  public void setCfValuesAsValues(Map<String, Object> cfValuesAsValues) {
    this.cfValuesAsValues = cfValuesAsValues;
  }


  public User cfAccumulatedValuesNullSafe(CustomFieldValues cfAccumulatedValuesNullSafe) {
    
    this.cfAccumulatedValuesNullSafe = cfAccumulatedValuesNullSafe;
    return this;
  }

   /**
   * Get cfAccumulatedValuesNullSafe
   * @return cfAccumulatedValuesNullSafe
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public CustomFieldValues getCfAccumulatedValuesNullSafe() {
    return cfAccumulatedValuesNullSafe;
  }



  public void setCfAccumulatedValuesNullSafe(CustomFieldValues cfAccumulatedValuesNullSafe) {
    this.cfAccumulatedValuesNullSafe = cfAccumulatedValuesNullSafe;
  }


  public User _transient(Boolean _transient) {
    
    this._transient = _transient;
    return this;
  }

   /**
   * Get _transient
   * @return _transient
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public Boolean getTransient() {
    return _transient;
  }



  public void setTransient(Boolean _transient) {
    this._transient = _transient;
  }


  @Override
  public boolean equals(java.lang.Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    User user = (User) o;
    return Objects.equals(this.id, user.id) &&
        Objects.equals(this.version, user.version) &&
        Objects.equals(this.auditable, user.auditable) &&
        Objects.equals(this.historized, user.historized) &&
        Objects.equals(this.notified, user.notified) &&
        Objects.equals(this.auditableFields, user.auditableFields) &&
        Objects.equals(this.name, user.name) &&
        Objects.equals(this.userName, user.userName) &&
        Objects.equals(this.addressbook, user.addressbook) &&
        Objects.equals(this.email, user.email) &&
        Objects.equals(this.roles, user.roles) &&
        Objects.equals(this.userLevel, user.userLevel) &&
        Objects.equals(this.securedEntities, user.securedEntities) &&
        Objects.equals(this.uuid, user.uuid) &&
        Objects.equals(this.cfValues, user.cfValues) &&
        Objects.equals(this.cfAccumulatedValues, user.cfAccumulatedValues) &&
        Objects.equals(this.securedEntitiesMap, user.securedEntitiesMap) &&
        Objects.equals(this.lastLoginDate, user.lastLoginDate) &&
        Objects.equals(this.code, user.code) &&
        Objects.equals(this.description, user.description) &&
        Objects.equals(this.referenceCode, user.referenceCode) &&
        Objects.equals(this.referenceDescription, user.referenceDescription) &&
        Objects.equals(this.parentCFEntities, user.parentCFEntities) &&
        Objects.equals(this.rolesLabel, user.rolesLabel) &&
        Objects.equals(this.roleSecuredEntities, user.roleSecuredEntities) &&
        Objects.equals(this.allSecuredEntities, user.allSecuredEntities) &&
        Objects.equals(this.nameOrUsername, user.nameOrUsername) &&
        Objects.equals(this.cfValuesNullSafe, user.cfValuesNullSafe) &&
        Objects.equals(this.cfValuesAsValues, user.cfValuesAsValues) &&
        Objects.equals(this.cfAccumulatedValuesNullSafe, user.cfAccumulatedValuesNullSafe) &&
        Objects.equals(this._transient, user._transient);
  }

  @Override
  public int hashCode() {
    return Objects.hash(id, version, auditable, historized, notified, auditableFields, name, userName, addressbook, email, roles, userLevel, securedEntities, uuid, cfValues, cfAccumulatedValues, securedEntitiesMap, lastLoginDate, code, description, referenceCode, referenceDescription, parentCFEntities, rolesLabel, roleSecuredEntities, allSecuredEntities, nameOrUsername, cfValuesNullSafe, cfValuesAsValues, cfAccumulatedValuesNullSafe, _transient);
  }


  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class User {\n");
    sb.append("    id: ").append(toIndentedString(id)).append("\n");
    sb.append("    version: ").append(toIndentedString(version)).append("\n");
    sb.append("    auditable: ").append(toIndentedString(auditable)).append("\n");
    sb.append("    historized: ").append(toIndentedString(historized)).append("\n");
    sb.append("    notified: ").append(toIndentedString(notified)).append("\n");
    sb.append("    auditableFields: ").append(toIndentedString(auditableFields)).append("\n");
    sb.append("    name: ").append(toIndentedString(name)).append("\n");
    sb.append("    userName: ").append(toIndentedString(userName)).append("\n");
    sb.append("    addressbook: ").append(toIndentedString(addressbook)).append("\n");
    sb.append("    email: ").append(toIndentedString(email)).append("\n");
    sb.append("    roles: ").append(toIndentedString(roles)).append("\n");
    sb.append("    userLevel: ").append(toIndentedString(userLevel)).append("\n");
    sb.append("    securedEntities: ").append(toIndentedString(securedEntities)).append("\n");
    sb.append("    uuid: ").append(toIndentedString(uuid)).append("\n");
    sb.append("    cfValues: ").append(toIndentedString(cfValues)).append("\n");
    sb.append("    cfAccumulatedValues: ").append(toIndentedString(cfAccumulatedValues)).append("\n");
    sb.append("    securedEntitiesMap: ").append(toIndentedString(securedEntitiesMap)).append("\n");
    sb.append("    lastLoginDate: ").append(toIndentedString(lastLoginDate)).append("\n");
    sb.append("    code: ").append(toIndentedString(code)).append("\n");
    sb.append("    description: ").append(toIndentedString(description)).append("\n");
    sb.append("    referenceCode: ").append(toIndentedString(referenceCode)).append("\n");
    sb.append("    referenceDescription: ").append(toIndentedString(referenceDescription)).append("\n");
    sb.append("    parentCFEntities: ").append(toIndentedString(parentCFEntities)).append("\n");
    sb.append("    rolesLabel: ").append(toIndentedString(rolesLabel)).append("\n");
    sb.append("    roleSecuredEntities: ").append(toIndentedString(roleSecuredEntities)).append("\n");
    sb.append("    allSecuredEntities: ").append(toIndentedString(allSecuredEntities)).append("\n");
    sb.append("    nameOrUsername: ").append(toIndentedString(nameOrUsername)).append("\n");
    sb.append("    cfValuesNullSafe: ").append(toIndentedString(cfValuesNullSafe)).append("\n");
    sb.append("    cfValuesAsValues: ").append(toIndentedString(cfValuesAsValues)).append("\n");
    sb.append("    cfAccumulatedValuesNullSafe: ").append(toIndentedString(cfAccumulatedValuesNullSafe)).append("\n");
    sb.append("    _transient: ").append(toIndentedString(_transient)).append("\n");
    sb.append("}");
    return sb.toString();
  }

  /**
   * Convert the given object to string with each line indented by 4 spaces
   * (except the first line).
   */
  private String toIndentedString(java.lang.Object o) {
    if (o == null) {
      return "null";
    }
    return o.toString().replace("\n", "\n    ");
  }

}

