com.sample.domain.entities.anagrafica.Cliente.java Source code

Java tutorial

Introduction

Here is the source code for com.sample.domain.entities.anagrafica.Cliente.java

Source

/**
 *   30/dic/2010
 *
 * Copyright (c) 2010 Alten Italia, All Rights Reserved.
 *
 * This software is the confidential and proprietary information of
 * Alten Italia ("Confidential Information").
 * You shall not disclose such Confidential Information and shall use it
 * only in accordance with the terms of the license agreement you entered 
 * into with Alten Italia.
 *
 * Alten Italia - MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY 
 * OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO 
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, 
 * OR NON-INFRINGEMENT. ALTEN ITALIA SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED
 * BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR 
 * ITS DERIVATIVES.
 */
package com.sample.domain.entities.anagrafica;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Set;

import javax.persistence.Access;
import javax.persistence.AccessType;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Embeddable;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.PrePersist;
import javax.persistence.PreUpdate;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

import org.apache.commons.lang3.StringUtils;
import org.eclipse.persistence.annotations.Convert;
import org.eclipse.persistence.annotations.Converter;
import org.eclipse.persistence.annotations.Customizer;
import org.springframework.core.style.ToStringCreator;

import com.sample.domain.entities.anagrafica.accessor.TipologiaCliente;
import com.sample.domain.entities.anagrafica.accessor.TipologiaRendicontazione;
import com.sample.domain.entities.mobile.DeviceRegistry;

/**
 * La classe di dominio che modella un Cliente
 * 
 * @author Massimo Ugues
 * 
 */
@Entity
@Access(AccessType.FIELD)
@Table(name = "S_MC_CC_CLIENTI")
@SequenceGenerator(name = "SEQ_USER_ID", sequenceName = "SEQ_MC_CC_CLIENTI", allocationSize = 1)
@Converter(name = "booleanConverter", converterClass = com.sample.domain.entities.converter.StringToBooleanConverter.class)
@Customizer(com.sample.domain.entities.customizer.DeviceRegistryCustomizer.class)
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "COD_TIPOCLIENTE", discriminatorType = DiscriminatorType.STRING, length = 2)
@DiscriminatorValue("PF")
public class Cliente implements Serializable {
    private static final long serialVersionUID = 3598764173647885361L;

    @EmbeddedId
    private ClienteId clienteId;

    @OneToMany(mappedBy = "cliente")
    @JoinColumns({ @JoinColumn(name = "ANAG_UTENTE", referencedColumnName = "ANAG_UTENTE"),
            @JoinColumn(name = "COD_ABI", referencedColumnName = "COD_ABI") })
    private Set<Contratto> contratti;

    @ManyToOne(optional = false)
    @JoinColumns({ @JoinColumn(name = "DEN_FILIALE", referencedColumnName = "COD_FILIALE"),
            @JoinColumn(name = "COD_ABI", referencedColumnName = "COD_ABI", insertable = false, updatable = false) })
    private Filiale filialeContratto;

    @ManyToOne(optional = false)
    @JoinColumns({ @JoinColumn(name = "DEN_FILIALE_PROP", referencedColumnName = "COD_FILIALE"),
            @JoinColumn(name = "COD_ABI", referencedColumnName = "COD_ABI", insertable = false, updatable = false) })
    private Filiale filialeProprietaria;

    @Column(name = "USER_ID")
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_USER_ID")
    private Long userId;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "USER_ID", updatable = false, insertable = false)
    private UtenteOtp utenteOtp;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "USER_ID", updatable = false, insertable = false)
    private Utente utente;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "USER_ID", updatable = false, insertable = false)
    private InfoMarketing infoMarketing;

    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
    private List<DeviceRegistry> mobileDevices = new ArrayList<DeviceRegistry>();

    @Column(name = "ANAG_COGNOME")
    private String cognome;

    @Column(name = "ANAG_NOME")
    private String nome;

    @Column(name = "COD_FISCALE")
    private String codiceFiscale;

    @Column(name = "ANAG_RAGIONESOCIALE")
    private String ragioneSociale;

    @Column(name = "COD_PIVA")
    private String partitaIva;

    @Transient
    private TipologiaCliente tipologiaCliente;

    @Column(name = "COD_SESSO")
    private String sesso;

    @Column(name = "DATA_NASCITA")
    @Temporal(TemporalType.TIMESTAMP)
    private Calendar dataNascita;

    @Column(name = "DESC_LUOGONASCITA")
    private String luogoNascita;

    @Column(name = "DESC_PROVINCIANASCITA")
    private String provinciaNascita;

    @Column(name = "DESC_NAZIONENASCITA")
    private String statoNascita;

    @Column(name = "DESC_FAX")
    private String fax;

    @Column(name = "DESC_CELLULARE")
    private String cellulare;

    @Column(name = "DESC_TELEFONOCASA")
    private String telefonoCasa;

    @Column(name = "DESC_TELEFONOUFFICIO")
    private String telefonoUfficio;

    @Column(name = "DESC_EMAIL")
    private String email;

    @Column(name = "DESC_SEGMENTOECONOMICO")
    private String segmenteEconomico;

    @Column(name = "DATA_CREAZIONE")
    @Temporal(TemporalType.TIMESTAMP)
    private Calendar dataCreazione = Calendar.getInstance();

    @Column(name = "DATA_ESTINZIONE")
    @Temporal(TemporalType.TIMESTAMP)
    private Calendar dataEstinzione;

    @Column(name = "INDIR_COD_TIP_GEOG")
    private String codiceZonaGeografica;

    @Column(name = "INDIR_VIA")
    private String indirizzo;

    @Column(name = "INDIR_NUM_CIVICO")
    private String numeroCivico;

    @Column(name = "INDIR_FRAZIONE")
    private String frazione;

    @Column(name = "INDIR_DENOM_COMUNE")
    private String comune;

    @Column(name = "INDIR_COD_PROV")
    private String provincia;

    @Column(name = "INDIR_DENOM_STATO")
    private String stato;

    @Column(name = "INDIR_CAP")
    private String cap;

    @Column(name = "FLAG_PRESAVISIONE")
    private Boolean presaVisione = true;

    @Column(name = "FLAG_SMS")
    @Convert("booleanConverter")
    private Boolean smsAbilitato;

    @Column(name = "LINGUA")
    private String codiceLingua = "IT";

    @Column(name = "FLAG_FIRMA_DIGITALE_ABILITATA")
    private Boolean firmaDigitaleAbilitata;

    @Transient
    private String atmAbilitato;

    @Column(name = "COD_ADES_MULTIB")
    private String codiceAdesioneMultibenefit;

    @Column(name = "COD_GESTORE")
    private String codiceGestore;

    @Column(name = "COD_MATRICOLAGESTORE")
    private String matricolaGestore;

    @Column(name = "FLAG_PROVENIENZA")
    private String provenienza;

    @Column(name = "EMAIL_INTERNA")
    private String emailInterna;

    @Transient
    private TipologiaRendicontazione tipologiaRendicontazione;

    @Transient
    private FlagAlert flagAlert = FlagAlert.DISATTIVATO;

    @PrePersist
    @PreUpdate
    public void normalize() {
        this.ragioneSociale = String.format("%s %s", StringUtils.trim(nome), StringUtils.trim(cognome));

        if (this.utente != null) {
            this.utente.setUserId(userId);
        }
        if (this.utenteOtp != null && !this.utenteOtp.getSerialNumber().trim().isEmpty()) {
            this.utenteOtp.setUserId(userId);
        }
        if (this.infoMarketing != null) {
            this.infoMarketing.setUserId(userId);
        }
        if (this.mobileDevices != null && mobileDevices.size() > 0) {
            mobileDevices.forEach(e -> e.setUserId(getUserId()));
        }
    }

    public Cliente() {
        super();
        this.tipologiaCliente = TipologiaCliente.PERSONA_FISICA;
    }

    public Cliente(String abi, String bt) {
        clienteId = new ClienteId(abi, bt);
    }

    public String getBt() {
        return (clienteId != null) ? clienteId.getBt() : null;
    }

    public String getAbi() {
        return (clienteId != null) ? clienteId.getAbi() : null;
    }

    public Long getUserId() {
        return userId;
    }

    public void setUserId(Long userId) {
        this.userId = userId;
    }

    public Set<Contratto> getContratti() {
        return contratti;
    }

    public void setContratti(Set<Contratto> contratti) {
        this.contratti = contratti;
    }

    public Filiale getFilialeContratto() {
        return filialeContratto;
    }

    public void setFilialeContratto(Filiale filialeContratto) {
        this.filialeContratto = filialeContratto;
    }

    public Filiale getFilialeProprietaria() {
        return filialeProprietaria;
    }

    public void setFilialeProprietaria(Filiale filialeProprietaria) {
        this.filialeProprietaria = filialeProprietaria;
    }

    public String getCognome() {
        return cognome;
    }

    public UtenteOtp getUtenteOtp() {
        return utenteOtp;
    }

    public void setUtenteOtp(UtenteOtp utenteOtp) {
        this.utenteOtp = utenteOtp;
    }

    public Utente getUtente() {
        return utente;
    }

    public void setUtente(Utente utente) {
        this.utente = utente;
    }

    public InfoMarketing getInfoMarketing() {
        return infoMarketing;
    }

    public void setInfoMarketing(InfoMarketing infoMarketing) {
        this.infoMarketing = infoMarketing;
    }

    public void setCognome(String cognome) {
        this.cognome = cognome;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getCodiceFiscale() {
        return codiceFiscale;
    }

    public void setCodiceFiscale(String codiceFiscale) {
        this.codiceFiscale = codiceFiscale;
    }

    public String getRagioneSociale() {
        return ragioneSociale;
    }

    public void setRagioneSociale(String ragioneSociale) {
        this.ragioneSociale = ragioneSociale;
    }

    public String getPartitaIva() {
        return partitaIva;
    }

    public void setPartitaIva(String partitaIva) {
        this.partitaIva = partitaIva;
    }

    public TipologiaCliente getTipologiaCliente() {
        return tipologiaCliente;
    }

    public void setTipologiaCliente(TipologiaCliente tipologiaCliente) {
        this.tipologiaCliente = tipologiaCliente;
    }

    @Access(AccessType.PROPERTY)
    @Column(name = "COD_TIPOCLIENTE")
    String getTipologiaClienteCode() {
        return (tipologiaCliente != null) ? tipologiaCliente.getCodiceTipologiaCliente() : "";
    }

    void setTipologiaClienteCode(String tipologiaClienteCode) {
        tipologiaCliente = TipologiaCliente.decode(tipologiaClienteCode);
    }

    public String getSesso() {
        return sesso;
    }

    public void setSesso(String sesso) {
        this.sesso = sesso;
    }

    public Calendar getDataNascita() {
        return dataNascita;
    }

    public void setDataNascita(Calendar dataNascita) {
        this.dataNascita = dataNascita;
    }

    public String getLuogoNascita() {
        return luogoNascita;
    }

    public void setLuogoNascita(String luogoNascita) {
        this.luogoNascita = luogoNascita;
    }

    public String getProvinciaNascita() {
        return provinciaNascita;
    }

    public void setProvinciaNascita(String provinciaNascita) {
        this.provinciaNascita = provinciaNascita;
    }

    public String getStatoNascita() {
        return statoNascita;
    }

    public void setStatoNascita(String nazioneNascita) {
        this.statoNascita = nazioneNascita;
    }

    public String getFax() {
        return fax;
    }

    public void setFax(String fax) {
        this.fax = fax;
    }

    public String getCellulare() {
        return cellulare;
    }

    public void setCellulare(String cellulare) {
        this.cellulare = StringUtils.deleteWhitespace(cellulare);
        setSmsAbilitato(this.cellulare != null && !this.cellulare.equals(""));
    }

    public String getTelefonoCasa() {
        return telefonoCasa;
    }

    public void setTelefonoCasa(String telefonoCasa) {
        this.telefonoCasa = StringUtils.deleteWhitespace(telefonoCasa);
    }

    public String getTelefonoUfficio() {
        return telefonoUfficio;
    }

    public void setTelefonoUfficio(String telefonoUfficio) {
        this.telefonoUfficio = telefonoUfficio;
    }

    public String getEmail() {
        return email;
    }

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

    public String getSegmenteEconomico() {
        return segmenteEconomico;
    }

    public void setSegmenteEconomico(String segmenteEconomico) {
        this.segmenteEconomico = segmenteEconomico;
    }

    public Calendar getDataCreazione() {
        return dataCreazione;
    }

    public void setDataCreazione(Calendar dataCreazione) {
        this.dataCreazione = dataCreazione;
    }

    public Calendar getDataEstinzione() {
        return dataEstinzione;
    }

    public void setDataEstinzione(Calendar dataEstinzione) {
        this.dataEstinzione = dataEstinzione;
    }

    public String getCodiceZonaGeografica() {
        return codiceZonaGeografica;
    }

    public void setCodiceZonaGeografica(String codiceZonaGeografica) {
        this.codiceZonaGeografica = codiceZonaGeografica;
    }

    public String getIndirizzo() {
        return indirizzo;
    }

    public void setIndirizzo(String indirizzo) {
        this.indirizzo = indirizzo;
    }

    public String getNumeroCivico() {
        return numeroCivico;
    }

    public void setNumeroCivico(String numeroCivico) {
        this.numeroCivico = numeroCivico;
    }

    public String getFrazione() {
        return frazione;
    }

    public void setFrazione(String frazione) {
        this.frazione = frazione;
    }

    public String getComune() {
        return comune;
    }

    public void setComune(String comune) {
        this.comune = comune;
    }

    public String getProvincia() {
        return provincia;
    }

    public void setProvincia(String provincia) {
        this.provincia = provincia;
    }

    public String getCap() {
        return cap;
    }

    public void setCap(String cap) {
        this.cap = cap;
    }

    public String getStato() {
        return stato;
    }

    public void setStato(String stato) {
        this.stato = stato;
    }

    public Boolean getPresaVisione() {
        return presaVisione;
    }

    public void setPresaVisione(Boolean presaVisione) {
        this.presaVisione = presaVisione;
    }

    public Boolean getSmsAbilitato() {
        return smsAbilitato;
    }

    public void setSmsAbilitato(Boolean smsAbilitato) {
        this.smsAbilitato = smsAbilitato;
    }

    public String getCodiceLingua() {
        return codiceLingua;
    }

    public void setCodiceLingua(String codiceLingua) {
        this.codiceLingua = codiceLingua;
    }

    public Boolean getFirmaDigitaleAbilitata() {
        return firmaDigitaleAbilitata;
    }

    public void setFirmaDigitaleAbilitata(Boolean firmaDigitaleAbilitata) {
        this.firmaDigitaleAbilitata = firmaDigitaleAbilitata;
    }

    public String getAtmAbilitato() {
        return atmAbilitato;
    }

    public void setAtmAbilitato(String atmAbilitato) {
        this.atmAbilitato = atmAbilitato;
    }

    public String getCodiceAdesioneMultibenefit() {
        return codiceAdesioneMultibenefit;
    }

    public void setCodiceAdesioneMultibenefit(String codiceAdesioneMultibenefit) {
        this.codiceAdesioneMultibenefit = codiceAdesioneMultibenefit;
    }

    public String getCodiceGestore() {
        return codiceGestore;
    }

    public void setCodiceGestore(String codiceGestore) {
        this.codiceGestore = codiceGestore;
    }

    public String getMatricolaGestore() {
        return matricolaGestore;
    }

    public void setMatricolaGestore(String matricolaGestore) {
        this.matricolaGestore = matricolaGestore;
    }

    public String getProvenienza() {
        return provenienza;
    }

    public void setProvenienza(String provenienza) {
        this.provenienza = provenienza;
    }

    public String getEmailInterna() {
        return emailInterna;
    }

    public void setEmailInterna(String emailInterna) {
        this.emailInterna = emailInterna;
    }

    public TipologiaRendicontazione getTipologiaRendicontazione() {
        return tipologiaRendicontazione;
    }

    public void setTipologiaRendicontazione(TipologiaRendicontazione tipologiaRendicontazione) {
        this.tipologiaRendicontazione = tipologiaRendicontazione;
    }

    public FlagAlert getFlagAlert() {
        return flagAlert;
    }

    public void setFlagAlert(FlagAlert flagAlert) {
        this.flagAlert = flagAlert;
    }

    public List<DeviceRegistry> getMobileDevices() {
        return mobileDevices;
    }

    public void setMobileDevices(List<DeviceRegistry> mobileDevices) {
        this.mobileDevices = mobileDevices;
    }

    public void addMobileDevice(DeviceRegistry mobileDevice) {
        this.mobileDevices.add(mobileDevice);
    }

    /**
     * restituisce l'identificativo fiscale (i.e. CodiceFiscale se PF, PIVA altrimenti)
     * @return 
     */
    public String getIdentificativoFiscale() {
        return getCodiceFiscale();
    }

    @Override
    public String toString() {

        return new ToStringCreator(this).append("smsAbilitato=" + smsAbilitato).append("clienteId=" + clienteId)
                .append("cognome=" + cognome).append("nome= " + nome).append("utenteOtp= " + utenteOtp)
                .append("utente= " + utente).append("infoMarketing= " + infoMarketing)
                .append("filialeProprietaria= " + filialeProprietaria)
                .append("rendicontazione=" + tipologiaRendicontazione).append("flagAlert=" + flagAlert).toString();

    }

    public ClienteId getClienteId() {
        return clienteId;
    }

    /*
     * COD_BUSTAPIN COD_PIN FLAG_PRIMOACCESSOCUSTOMER DATA_PRIMOACCESSOCUSTOMER DATA_CONVERSIONE IMP_AFI TIMESTAMP_PRESAVISIONE OCCUPATION EDUCATION_LEVEL USER_ALIAS FLAG_PERDITE
     * TIMESTAMP_PERDITE COD_TIPO_RACC
     */

    /**
     * La classe di dominio che modella la chiave primaria di un {@link Cliente}
     * 
     * @author Massimo Ugues
     * 
     */
    @Embeddable
    static public class ClienteId implements Serializable {
        private static final long serialVersionUID = -54640203292300521L;

        @Column(name = "ANAG_UTENTE")
        private String bt;

        @Column(name = "COD_ABI")
        private String abi;

        public ClienteId() {
            super();
        }

        public ClienteId(String abi, String bt) {
            this.bt = bt;
            this.abi = abi;
        }

        public String getBt() {
            return bt;
        }

        public String getAbi() {
            return abi;
        }

        @Override
        public String toString() {
            return "clientId={abi=[" + abi + "] bt=[" + bt + "]}";
        }
    }
}