Java tutorial
/** * 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 + "]}"; } } }