gt:     if (email == null && user != null) {
context: package org.sigmah.server.domain;
  /*
   * #%L
   * Sigmah
   * %%
   * Copyright (C) 2010 - 2016 URD
   * %%
   * This program is free software: you can redistribute it and/or modify
   * it under the terms of the GNU General Public License as
   * published by the Free Software Foundation, either version 3 of the
   * License, or (at your option) any later version.
   *
   * This program is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   * GNU General Public License for more details.
   *
   * You should have received a copy of the GNU General Public
   * License along with this program.  If not, see
   * <http://www.gnu.org/licenses/gpl-3.0.html>.
   * #L%
   */
  
  import java.util.ArrayList;
  import java.util.Collections;
  import java.util.Date;
  import java.util.List;
  
  import javax.persistence.*;
  
  import org.sigmah.client.i18n.I18N;
  import org.sigmah.server.domain.base.AbstractEntityId;
  import org.sigmah.server.domain.util.Deleteable;
  import org.sigmah.server.domain.util.EntityConstants;
  import org.sigmah.shared.dto.referential.ContactModelType;
  import org.sigmah.shared.dto.referential.ContainerInformation;
  
  @Entity
  @Table(name = EntityConstants.CONTACT_TABLE)
  public class Contact extends AbstractEntityId<Integer> implements Deleteable {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = EntityConstants.CONTACT_COLUMN_ID)
    private Integer id;
  
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    @JoinColumn(name = EntityConstants.CONTACT_MODEL_COLUMN_ID, nullable = false)
    private ContactModel contactModel;
  
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = EntityConstants.CONTACT_COLUMN_USER)
    private User user;
  
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = EntityConstants.ORGANIZATION_COLUMN_ID)
    private Organization organization;
  
    @Column(name = EntityConstants.CONTACT_COLUMN_NAME)
    private String name;
  
    @Column(name = EntityConstants.CONTACT_COLUMN_FIRSTNAME)
    private String firstname;
  
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = EntityConstants.CONTACT_COLUMN_MAIN_ORG_UNIT)
    private OrgUnit mainOrgUnit;
  
    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(
        name = EntityConstants.CONTACT_ORG_UNIT_LINK_TABLE,
        joinColumns = @JoinColumn(name = EntityConstants.CONTACT_COLUMN_ID),
        inverseJoinColumns = @JoinColumn(name = EntityConstants.CONTACT_ORG_UNIT_COLUMN_ORG_UNIT),
        uniqueConstraints = @UniqueConstraint(columnNames = {
            EntityConstants.CONTACT_COLUMN_ID,
            EntityConstants.CONTACT_ORG_UNIT_COLUMN_ORG_UNIT
        })
    )
    private List<OrgUnit> secondaryOrgUnits = new ArrayList<>();
  
    @Column(name = EntityConstants.CONTACT_COLUMN_LOGIN)
    private String login;
  
    @Column(name = EntityConstants.CONTACT_COLUMN_EMAIL)
    private String email;
  
    @Column(name = EntityConstants.CONTACT_COLUMN_PHONE_NUMBER)
    private String phoneNumber;
  
    @Column(name = EntityConstants.CONTACT_COLUMN_POSTAL_ADDRESS)
    private String postalAddress;
  
    @Column(name = EntityConstants.CONTACT_COLUMN_PHOTO)
    private String photo;
  
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = EntityConstants.CONTACT_COLUMN_COUNTRY)
    private Country country;
  
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = EntityConstants.CONTACT_COLUMN_PARENT)
    private Contact parent;
  
    @Column(name = EntityConstants.CONTACT_COLUMN_DATE_CREATED)
    @Temporal(value = TemporalType.TIMESTAMP)
    private Date dateCreated;
  
    @Column(name = EntityConstants.CONTACT_COLUMN_DATE_DELETED)
    @Temporal(value = TemporalType.TIMESTAMP)
    private Date dateDeleted;
  
    @Override
    public Integer getId() {
      return id;
    }
  
    @Override
    public void setId(Integer id) {
      this.id = id;
    }
  
    public ContactModel getContactModel() {
      return contactModel;
    }
  
    public void setContactModel(ContactModel contactModel) {
      this.contactModel = contactModel;
    }
  
    public User getUser() {
      return user;
    }
  
    public void setUser(User user) {
      this.user = user;
    }
  
    public Organization getOrganization() {
      return organization;
    }
  
    public void setOrganization(Organization organization) {
      this.organization = organization;
    }
  
    public String getName() {
      // Take the name from the organization or from the user if available
      if (organization != null) {
        return organization.getName();
      }
  
      if (user != null) {
        return user.getName();
      }
  
      return name;
    }
  
    public void setName(String name) {
      if (organization != null) {
        organization.setName(name);
        return;
      }
      if (user != null) {
        user.setName(name);
        return;
      }
      this.name = name;
    }
  
    public String getFirstname() {
      // Take the firstname from the user if available
      if (user != null) {
        return user.getFirstName();
      }
  
      return firstname;
    }
  
    public void setFirstname(String firstname) {
      if (user != null) {
        user.setFirstName(firstname);
        return;
      }
      this.firstname = firstname;
    }
  
    public String getFullName() {
      String firstname = getFirstname();
      String name = getName();
  
      if (firstname == null && name == null) {
        return null;
      }
  
      if (firstname == null) {
        return name.toUpperCase();
      }
  
      if (name == null) {
        return firstname;
      }
  
      return firstname + " " + name.toUpperCase();
  
    }
  
    public String getType() {
      String typeLabel = I18N.CONSTANTS.contactTypeIndividualLabel();
  
      ContactModelType type = getContactModel().getType();
  
      if(type == ContactModelType.ORGANIZATION) {
        typeLabel = I18N.CONSTANTS.contactTypeOrganizationLabel();
      }
  
      return typeLabel;
    }
  
    public OrgUnit getMainOrgUnit() {
      // Take the main org unit from the organization or from the user if available
      if (organization != null) {
        return organization.getRoot();
      }
  
      if (user != null) {
        return user.getMainOrgUnitWithProfiles().getOrgUnit();
      }
  
      return mainOrgUnit;
    }
  
    public void setMainOrgUnit(OrgUnit mainOrgUnit) {
      if (user != null) {
        // XXX: A user org unit shouldn't be updated from contact forms because OrgUnits alone doesn't provide permission information
        return;
      }
      this.mainOrgUnit = mainOrgUnit;
    }
  
    public List<OrgUnit> getSecondaryOrgUnits() {
      // Take the secondary org units from the user if available
      if (user != null) {
        return user.getSecondaryOrgUnits();
      }
  
      return secondaryOrgUnits;
    }
  
    public void setSecondaryOrgUnits(List<OrgUnit> secondaryOrgUnits) {
      if (user != null) {
        // XXX: A user org unit shouldn't be updated from contact forms because OrgUnits alone doesn't provide permission information
        return;
      }
      this.secondaryOrgUnits = secondaryOrgUnits;
    }
  
    @Transient
    public List<OrgUnit> getOrgUnits() {
      if (mainOrgUnit == null) {
        return Collections.emptyList();
      }
  
      List<OrgUnit> orgUnits = new ArrayList<>();
      orgUnits.add(mainOrgUnit);
      orgUnits.addAll(secondaryOrgUnits);
      return orgUnits;
    }
  
    public String getLogin() {
      // contact login can be different from user email
      // take it from user in fallback
      if (login == null && user != null) {
        return user.getEmail();
      }
  
      return login;
    }
  
    public void setLogin(String login) {
      // Do not update user.login as it is used during authentication process
      this.login = login;
    }
  
    public String getEmail() {
      // contact email can be different from user email
      // take it from user in fallback
  